[英]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.