首页 > 解决方案 > 我的代码仅适用于一个输入。请指教

问题描述

我是 C++ 问题的初学者。我试图尝试确定数字是否完美的问题。我的代码似乎只适用于一个数字,即 6。对于所有其他数字,它都像数字 28 一样失败。我找不到哪里出错了。请指教

#include <iostream>

using namespace std;

int main()
{
    int n;
    int sum = 1;

    cout<<"enter a number : " <<endl;
    cin>>n;

    for(int i =2;i<=n-1;i++)
    {
        if(n%i != 0)
        {
            break;
        }
        else
        {
            sum = sum + i;
        }
    }

    if(sum == n)
    {
        cout<<"Perfect Number"<<endl;

    }
    else
    {
        cout<<"Not a perfect number"<<endl;

    }

    return 0;
}

标签: c++

解决方案


你的问题在这里:

for(int i =2;i<=n-1;i++)
    {
        if(n%i != 0)
        {
            break;
        }
        else
        {
            sum = sum + i;
        }
    }

随着break您停止for循环的整个迭代,这意味着在第一个不是除数的数字之后,即n%i != 0等于 true 时,您将跳出循环并继续执行if(sum == n). 我猜你误会了,因为你不想添加i不是除数的 s,你太“渴望”不计算它们。我猜您将它与continue返回for条件检查并i+1在条件仍然为真时继续执行的情况混为一谈。

仍然就像您将加法打包在一个分支中一样,这意味着只有当且仅前一个为假时else才会发生求和,这意味着如果它是一个除数。这就是你不需要的原因,在这种情况下,这不会有任何大的区别,也不会“破坏”你的程序。ifn%i != 0continuebreak


推荐阅读