簡體   English   中英

我的代碼僅適用於一個輸入。 請指教

[英]My code works for only one input. Please advice

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

你的問題在這里:

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之前的if為假時,總和才會發生,這意味着如果它是一個除數。 這就是你不需要continue的原因,這不會有什么大的不同,也不需要break ,它在這種情況下“破壞”你的程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM