我的代码仅适用于一个输入。请指教

时间:2019-07-01 18:40:42

标签: c++

我是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;
}

1 个答案:

答案 0 :(得分:1)

您的问题在这里:

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,因此您“急于”不计其数。我猜您将其与continue混合在一起,后者会返回到for条件检查,并且如果条件仍然为真,将继续使用i+1执行。

仍然将加法打包到一个else分支中,这意味着只有在if之前的n%i != 0为假时,才可以以任何一种方式进行求和,这意味着如果它的a除数。这就是您不需要continuebreak的原因,t.Context.prototype._defineProperty = function(e, n) { t.isUndef(this[n]) && Object.defineProperty(this, n, { get: function() { return "function" == typeof e[n] ? e[n].bind(e) : e[n] }, set: function(t) { e[n] = t // error is here on the t } }) } 不会对您造成太大的影响,在这种情况下,您无需编程。