小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。
例如:半径的平方如果为25
优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点。
输入描述:
输入为一个整数,即为圆半径的平方,范围在32位int范围内。
输出描述:
输出为一个整数,即为优雅的点的个数
输入例子:
25
输出例子:
12
java.lang.Math.sqrt(double a) 返回正确舍入的一个double值的正平方根。特殊情况:
如果参数是NaN或小于为零,那么结果是NaN.
如果参数是正无穷大,那么结果为正无穷大.
如果参数是正零或负零,那么结果是一样的参数.
否则,其结果是最接近真正的数学平方根的参数值的double值。
以下是java.lang.Math.sqrt()方法的声明
public static double sqrt(double a)
下面的例子说明了如何使用lang.Math.sqrt()方法。
package com.yiibai;
import java.lang.*;
public class MathDemo {
public static void main(String[] args) {
// get two double numbers numbers
double x = 9;
double y = 25;
// print the square root of these doubles
System.out.println("Math.sqrt(" + x + ")=" + Math.sqrt(x));
System.out.println("Math.sqrt(" + y + ")=" + Math.sqrt(y));
}
}
让我们来编译和运行上面的程序,这将产生以下结果:
Math.sqrt(9)=3.0
Math.sqrt(25)=5.0
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
System.out.println(getResult(n));
}
public static int getResult(int n){
int res = 0;
double r = Math.sqrt(n);
double temp = 0;
for(double i=0;i<r;i++){
temp = Math.sqrt(n - i*i);
if(temp-(int)temp==0){
res=res+1;
}
temp = 0;
}
return res*4;
}
}
注意 : double r = Math.sqrt(n);这句使得精度有缺失,应直接使用n。
答案错误:您提交的程序没有通过所有的测试用例
case通过率为50.00%
测试用例:
18
对应输出应该为:
4
你的输出为:
0
查看出错:
18
i is:0.0 4.242640687119285
i is:1.0 4.12310562561766
i is:2.0 3.741657386773941
i is:3.0 2.9999999999999996
i is:4.0 1.4142135623730938
0