在整数范围内找到完美数字。
首先我写了这段代码:
#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.
答案 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]);
}