当数字没有完美的正方形时,它应该返回false,否则返回根。但是在这段代码中它始终返回根。例如。输入5,根2.
main()
{
int i;
int number=0;
int result=0;
for(i=0; i<10; i++){
printf("Testing:");
scanf("%i",&number);
result = isSquare(number);
if(result==0)
printf("Fail\n");
else
printf("%i\n",result);
}
}
int isSquare(int n)
{
float root = sqrt(n);
if (n == (int) n)
return root;
else
return 0;
}
答案 0 :(得分:2)
而不是:
if (n == (int) n) // n is an integer (not necessarily a perfect square)
你的意思是:
if (root == (int) root) // root is an integer (so n is a perfect square)
答案 1 :(得分:1)
不应该是这样吗?
int isSquare(int n)
{
float root = sqrt(n);
if (n == ((int) root)*((int) root)) //Better use floor() function
return root;
else
return 0;
}