題目描述
假設圓的圓心位於(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;
}