完全平方数 一点小问题

为什么我的代码提交只有60分呢 测试一切正常

标题
完全平方数

类别
基本计算

时间限制
1S

内存限制
256Kb

问题描述
若一个整数n能表示成某个整数m的平方的形式,则称这个数为完全平方数。写一个程序判断输入的整数是不是完全平方数。

输入说明
输入数据为一个整数n,0<=n<10000000。

输出说明
如果n是完全平方数,则输出构成这个完全平方数的整数m,否则输出no。

输入样例
样例1:
144
样例2:
15

输出样例
样例1输出:
12
样例2输出:
no

#include

int main () {
int n, m = 0, i;
scanf("%d", &n);

for (i = 1; i < n / 2; i++) {
    if (i * i == n) {
        m = i;
        break;
    }
}
if (m == 0)
    printf("no");
else
    printf("%d", m);
return 0;

}

望采纳

  • 这段代码的问题在于,它只检查了小于 n / 2 的数字是否是完全平方数。但是,实际上可能存在一个数字大于 n / 2,它的平方等于 n。
  • 举个例子,如果 n 是 169,那么这段代码会检查到 i 等于 8,然后终止循环。但是,13 的平方等于 169,所以这个程序会输出 no,而不是正确的答案 13。
  • 为了解决这个问题,你可以将循环的终止条件改为 i * i <= n。这样,你就可以检查所有小于或等于 n 的数字是否是完全平方数。
  • 此外,你还可以使用 Python 内置的 math.sqrt 函数,该函数可以快速求出任意数字的平方根。你可以将 i * i 替换为 math.sqrt(n)。

修改后的代码:

#include <stdio.h>
#include <math.h>

int main() {
    int n;
    scanf("%d", &n);

    // 使用 math.sqrt 函数求出 n 的平方根
    double m = sqrt(n);

    // 如果 m 是整数,则 n 是完全平方数
    if (m == (int)m) {
        printf("%d", (int)m);
    } else {
        printf("no");
    }

    return 0;
}

你想想看n=4和n=1时你的代码符不符合