这个为什么输出不显示
这段代码,是想输出数据区间的完数?修改如下,供参考:
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int i, j, a, flg = 0;
for (i = 2; i <= n; i++) {
for (j = 2, a = 1; j < i; j++) {
if (i % j == 0)
{
a = a + j;
}
}
if (a == i){
flg = 1;
printf("a=%d\n", i);
}
}
if (!flg)
printf("No Found.");
return 0;
}
你这个循环的层级也太乱了,先把大括号对准吧🧐
你这个两个循环中a不可能等于I,所以也不会有输出。改成a==j试试
如果对你有帮助,还请点个采纳!
我来分析一下你的代码:
if ( i % j == 0) {
a = a + j;
}
意味着当i是j的整数倍的时候,执行a=a+j。所以当n=28时,每轮i循环满足条件的j分别有:{2},{3},{2,4},{5},{2,3,6},{7},{2,4,8},{3,9},{2,5,10},{11},{2,3,6,12},{13},{2,7,14},{3,5,15},{2,4,8,16},{17},{2,3,6,9,18},{19},{2,4,5,10,20},{3,7,21},{2,11,22},{23},{2,3,4,6,8,12,24},{5,25},{2,13,26},{3,9,27},{2,4,7,14,28}。每个值都会累加给a,最终的值我懒得算了,总之挺大的一个数。
if( a == i ) {
printf("a=%d\n", i);
}
当a==i时,才会在屏幕上输出"a=..."。当第一轮i循环进行到这里时,a=3,i=2;第二轮a=6,i=3;第三轮a=12,i=4;第四轮……我不想再列举下去了,总之a的值已经远大于i,不可能满足a==i的,自然也不会有输出。
如果没有a==i的情况就不会输出结果。你可以在a赋值之后分别打印i, j, a的值,然后对比一下你就知道哪里有问题了
改成a==j试试