int a = sqrt(x)。
如果x是完全平方数,则得到的a是一个正整数,且a的平方等于x。
如果x 不是完全平方数,则x开平方后会是一个小数,保存为int型就会失去精度,变小,那么a的平方就不等于x,会小于x
#include<stdio.h> #include<math.h> int isp(int n){ int i = sqrt(n); // if(n == i * i) return 1; else return 0; } int main(){ int max=0,n,i,j,x; scanf("%d",&n); for(i=0; i<n; i++){ scanf("%d ", &x); j = isp(x); if(j==0 && max < x) max=x; } printf("%d\n", max); return 0; }为什么不能用if(n / i == i)来验证n是否为完全平方数?
举例说明,比如n=40, 开平方后约为6.3,用int型保存即为6,那么n/i也就是40/6,结果是6.67,保存为int型就是6,那么n/i==i。但40并不是完全平方数。
。
。