找到完美的数字

时间:2017-01-14 17:33:46

标签: c++ c

在整数范围内找到完美数字。

首先我写了这段代码:

#include <stdio.h>

int main() {
    int ara[5] = { 6, 28, 496, 2128, 33550336 };
    int num, i, l, j, kase;

    scanf("%d", &kase);
    for (l = 0; l < kase; l++) {
        scanf("%d", &num);
        j = 1;
        for (i = 0; ara[i] <= num; i++) {
            printf("%d\n", ara[i]);
        }
    }
    return 0;
}

但是当我输入更大的数字时,例如:

2//kase
40000000//input_1

输出:

6
28
496
2128
33550336
1
0
7

76596795(input_2)输出:

6
28
496
2128
33550336
1
1
7

当我在循环中使用if条件时,它的效果非常好。

#include <stdio.h>

int main() {
    int ara[5] = { 6, 28, 496, 8128, 33550336 };
    int i, l, kase;
    int num;
    scanf("%d", &kase);
    for (l = 0; l < kase; l++) {
        scanf("%d", &num);
        for (i = 0; i < 5; i++) {
            if (ara[i] <= num) {
                printf("%d\n", ara[i]);
            } else {
                break;
            }
        }
    }
    return 0;
}

如:1 // kase 40000000 //输入输出:6, 28, 8128, 33550336.

如果有人告诉我一些有关此事的详细信息,那将对我很高兴。

1 个答案:

答案 0 :(得分:1)

这是因为在第一种情况下,即使i的值达到并越过5,您的控件也会保持循环。

for(i = 0; ara[i] <= num; i++)
    {
        printf("%d\n", ara[i]);

    }

假设您输入40000000。然后,数组中的所有元素都满足条件ara[i] <= num。但这是退出循环的唯一条件,因为你保持循环i=5,6,7...等等。其余的输出值是垃圾值。

在第二种情况下,您确保i<5,以便解决问题。你可以这样做

 for(i = 0; i < 5 && ara[i] <= num; i++)
    {
        printf("%d\n", ara[i]);

    }