HHU 1015 圓上的點點點點點點點點點點點點點點(浮點數精度處理)

題目描述

假設圓的圓心位於(0,0),半徑爲r,圓的"某積"公式爲S=r2,請問"某積"爲s的圓上有多少個以整數爲座標的點?

輸入

多組測試數據,請處理到文件結束。

對於每組測試數據,只包含一個整數S。

1<=S<=2,000,000,000。

輸出

輸出一個整數,代表以整數爲座標的點的個數。

樣例輸入

253

樣例輸出

120

提示

總結:

這道題總體思路很清晰,只要遍歷x從0到r內的所有整數,再計算對應點y,如果y是整數,那麼這個點就在圓上,否則不在,看似簡單,但是這種會出現浮點數的等於什麼的處理一直是我的弱點,這道題正好補上了這個點

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
const double ex=1e-8;
int main()
{
	//freopen("input.txt","r",stdin);
	int s;
	while(scanf("%d",&s)!=EOF)
	{
		int counter=0;
		double b=sqrt(s);
		for(int i=1;i<b||abs(b-i)<ex;i++)
		{
			double temp=sqrt(s-i*i);
			int y=temp;
			if(abs(temp-y)<ex) 
			{
				if(abs(b-i)<ex) counter++;
				else counter+=2;
			}
		}
		counter=2*counter;
		int temp=b;
		if(abs(temp-b)<ex) counter+=2;
		printf("%d\n",counter);
	}
	return 0;
}


 

發佈了224 篇原創文章 · 獲贊 13 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章