我想知道如何开发一个 C++ 程序,提示用户输入 2 个数字 n1
、n2
,其中 n2
大于 n1
。然后该程序用于确定n1
和n2
之间的所有完全数。如果一个整数的因子之和(包括 1(但不包括该数本身))等于该数本身,则该整数被称为完美数。例如,6 是一个完美数,因为 6 = 1 + 2 + 3
。
到目前为止,这是我想出的,它没有运行时/语法错误,但不幸的是逻辑错误:
#include <iostream>
using namespace std;
int main(){
int number, sum = 0, divi = 1, n1, n2;
cout<<" Please enter n1: ";
cin>>n1;
cout<<" Please enter n2: ";
cin>>n2;
number = n1;
while(number <= n2){
while(divi <=n2){
if (number%divi ==0)
sum+=divi;
divi++;
}
if(sum == number)
cout<<number<<endl;
number++;
}
return 0;
}
我只能使用 while 循环。你能发现任何逻辑错误吗?
最佳答案
您需要重置
divi
到 1 和sum
在行while(number <= n2){
之后变为 0 . (否则divi
和sum
会错误增长)。重新定义你内部的上限
while
至while(divi < number){
. (您想检查 1 和number
之间的因数,而不是它之后的因数。)
关于c++ - 完全数程序中的逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22379431/