ruimedf 2023-10-31 15:37 采纳率: 0%
浏览 1

(标签-ios|关键词-stream)完美数

求已给数的下一个完美数,我的代码不知道错在哪了,求指点

#include <iostream>
using namespace std;
int main()
{
    long long n = 0;
    cin>>n;
    long long num = n,flag = 0;
    for(num;flag == 0;num++)
    {
        long long sum = 0;
        for(long long i = 1;i <= num;i++)
        {
            if(num % i == 0)
            {
                sum += i;
            }    
        }
        if(num == sum)
        {
            flag = 1;
        }
    } 
    cout<<num;
    return 0;
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-01 00:42
    关注

    【以下回答由 GPT 生成】

    在你的代码中,存在以下问题: 1. 循环变量num的初始值应为给定数n,而不是0。 2. 循环变量flag的初始值应为0,表示未找到完美数,而不是1。 3. 外层for循环中,判断结束条件应该是flag == 0,表示当没有找到完美数时继续循环。 4. 内层for循环中,初始值i应该为2,因为1是所有数的因子,不需要计算。 5. 计算因子和时,应该将因子i加到sum上,而不是num本身。

    以下是修改后的代码:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        long long n = 0;
        cin >> n;
        long long num = n, flag = 0;
        for (; flag == 0; num++)
        {
            long long sum = 0;
            for (long long i = 2; i <= num/2; i++)
            {
                if (num % i == 0)
                {
                    sum += i;
                }
            }
            if (num == sum)
            {
                flag = 1;
            }
        }
        cout << num;
        return 0;
    }
    

    请注意在内层for循环中的判断条件i <= num/2,因为一个数的因子最大不会超过它的一半。此外,为了提高效率,内层for循环可以进一步优化,例如只遍历到sqrt(num)。

    希望以上修改能够解决问题,如果还有其他疑问,请随时提出。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月31日

悬赏问题

  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数