我认为这个问题可以通过一个平方根int数来解决....但是 为什么这段代码显示错误答案........?
#include<stdio.h>
#include<math.h>
int main(){
long int n;
while(scanf("%ld",&n)==1&& n!=0)
{
long double dbl=(long)sqrt(n);
int in=sqrt(n);
if(dbl==in)
printf("yes\n\n");
else
printf("no\n\n");
}
return 0;
}
答案 0 :(得分:0)
此代码错误,因为在math.h中,sqrt定义为double sqrt(double v);
,因为浮点计算不一定准确。
这一行long double dbl=(long)sqrt(n);
做了很多事情:
第二个int in=sqrt(n);
几乎相同(对于开头和小值):
然后你测试:
in
值转换为long double(因为其他部分是)因此,在这两个部分中,您执行的操作完全相同,因此结果可能不是您想要的。
正如其他人所说,你应该:
代码:
#include<stdio.h>
#include<math.h>
int main(){
long int n;
while(scanf("%ld",&n)==1&& n!=0)
{
double dbl=sqrt((double) n);
int in=(int) (dbl + 0.5);
if(in * in == n)
printf("yes\n\n");
else
printf("no\n\n");
}
return 0;
}