c++ - 完全数程序中的逻辑错误

标签 c++ math while-loop primes perfect-numbers

我想知道如何开发一个 C++ 程序,提示用户输入 2 个数字 n1n2,其中 n2 大于 n1。然后该程序用于确定n1n2 之间的所有完全数。如果一个整数的因子之和(包括 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 循环。你能发现任何逻辑错误吗?

最佳答案

  1. 您需要重置 divi到 1 和 sum在行 while(number <= n2){ 之后变为 0 . (否则 divisum 会错误增长)。

  2. 重新定义你内部的上限 whilewhile(divi < number){ . (您想检查 1 和 number 之间的因数,而不是它之后的因数。)

关于c++ - 完全数程序中的逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22379431/

相关文章:

c++ - Qt 中具有高度依赖函数的单元测试

c++ - 从文本字符串中删除 HTML 标签

java - Java 中的数学 - 不同对象的不同结果

c++ - 如何使用 Xcode 4.6.2 到 7.1.1 恢复对 Mac OS X 10.6 部署的 c++0x/c++11 支持

php - 查找添加了哪些数字以产生结果

java - 使用 apache 数学获取分数的百分位数

c++ - 如何重构这个 while 循环以摆脱 "continue"?

在c中连续接收udp套接字

javascript - 我想知道while循环中要写什么条件

c++ - boost::变体用法