关于#c语言#的问题,请各位专家解答!

img


看一看为什么运行出来一直是1,玫瑰四叶数,把循环中的i写成j可以正常运行,这样是哪里错了呢?

按照你的逻辑来,
i 最开始是1000
j = i; 那么j 也是1000
whille 循环你用 i,分别求每一位的 4 次方
ok。。。。错误来了,你有想过吗?i 最后为几?i 经过你这么一系列 除法之后,i 最后结果为1,sum 为几?也为1
ok。。。i 为1 了,退出for 循环了
明白问题的地方了吗?

你外层用i,内层还用i啊
内层乱改i的值,不死循环了

while循环中的i全部换成j,不能再用i啦
然后最后的if判断应该是sum == i,输出的也应该是i。你全用反了

按图里标示的修改:

img

img


#include <stdio.h>

int main()
{
    int i, j, sum = 0;
    for (i = 1000; i <= 9999; i++)
    {
        j = i;
        sum = 0;
        while (j > 0)
        {
            sum += (j % 10)*(j % 10)*(j % 10)*(j % 10);
            j /= 10;
        }

        if (sum == i)
        {
            printf("%d\n", i);
        }
    }
    return 0;
}

把for循环内,除了第一句外的所有用到i的地方全部改成j