
判断是否是完全平方数,不用sqrt形式。为什么我的12的完全平方数输入后输出是no?
关注我给你进行了逐行演绎解释,你输入144之后发生的事情,请查看以下代码注释内容:
#include<stdio.h>
int main()
{
int n,i=0;
int m;
scanf("%d",&n); //144
for(i=0;i<n;i++)
{
m=i*i; //这个循环这里只有这一行代码,所以会一直运行到 i=143的时候,此时m=143^2
}
if(m==n) //现在,判断143^2 与 144是否相等,结果必然是no了。所以这部分代码应该放到上面循环里面,当每一次计算出新的m值就立刻与n进行比较。
printf("%d",i);
else
printf("no");
return 0;
}
然后,你的代码修改后如下:
#include <stdio.h>
int main()
{
int n, i = 0;
int m;
scanf("%d", &n); // 输入n的值
for(i = 0; i < n; i++)
{
m = i * i; // 计算i的平方
if(m == n) // 判断平方是否等于n
{
printf("%d", i);
return 0; //当获得结果可以直接结束程序,如此也就没有else语句的必要了,这里直接删掉else
}
}
printf("no"); //如果前面循环都跑完了最终才顺利跑到这一行,说明肯定是非完全平方数,直接打印no
return 0;
}
另外,以下是使用if语句判断一个数是否是完全平方数的另一种写法的C语言代码供参考:
#include <stdio.h>
int isPerfectSquare(int num) {
if (num < 0) {
return 0;
}
int i = 1;
while (num > 0) {
num -= i;
i += 2;
}
return num == 0;
}
int main() {
int num;
printf("请输入一个正整数: ");
scanf("%d", &num);
if (isPerfectSquare(num)) {
printf("%d 是一个完全平方数\n", num);
} else {
printf("%d 不是一个完全平方数\n", num);
}
return 0;
}
在这个代码中,我们使用了一个名为isPerfectSquare的函数来判断一个数是否是完全平方数。函数中会先判断输入的数是否小于0,如果是则直接返回0。然后使用一个循环来依次减去从1开始的奇数,直到输入的数小于等于0为止。循环结束后如果数为0,则说明是完全平方数,返回1;否则不是完全平方数,返回0。
在main函数中,我们先从用户输入一个正整数,然后调用isPerfectSquare函数来判断这个数是否是完全平方数,并根据返回的结果输出相应的信息。