Straw- 2022-12-22 23:30 采纳率: 50%
浏览 26
已结题

完全平方数 一点小问题

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

标题
完全平方数

类别
基本计算

时间限制
1S

内存限制
256Kb

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

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

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

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

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

#include <stdio.h>

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;

}

  • 写回答

2条回答 默认 最新

  • ShowMeAI 2022-12-23 00:03
    关注

    望采纳

    • 这段代码的问题在于,它只检查了小于 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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 12月22日

悬赏问题

  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False