c++ 检查除数之和是否等于数字的程序不起作用

kq0g1dla  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(75)

所以我试着做了一个小程序,它会得到一个输入n,代表你想放进去的数字,然后它会检查这个数字的除数之和是否等于它,然后在最后它会显示有多少个数字的除数之和等于它们,但是由于某种原因,它不起作用,它总是显示0

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int n, k, l, i, j, m;

    cin >> n;
    m = 0;
    l = 0;

    for (i = 0; i < n; i++){
        cin >> k;
        m = 0;

        for (j = 1; j <= n/2; j++) {
            if (k%j == 0) {
                m = m + j;
            }
        }
        if (k == m){
            l++;
        }
    }
    cout << l;

    return 0;
}
h9vpoimq

h9vpoimq1#

使用更有意义的名称会立即暴露错误:

int main()
{
    int tests, number, successes, test, candidate, sum;

    cin >> tests;
    sum = 0;
    successes = 0;

    for (test = 0; test < tests; test++){
        cin >> number;
        sum = 0;

        for (candidate = 1; candidate <= tests/2; candidate++) {
            if (number%candidate == 0) {
                sum = sum + candidate;
            }
        }
        if (number == sum){
            successes++;
        }
    }
    cout << successes;

    return 0;
}

现在很明显,您在最内层循环中使用了错误的上边界。

2q5ifsrm

2q5ifsrm2#

问题就在这里:

for (j = 1; j <= n/2; j++) {

n告诉您要检查多少个数字,但您实际检查的数字是k,因此应该是

for (j = 1; j < k; j++) {

我还删除了除以2的部分,假设您要对所有除数求和。

相关问题