我用c语言编了一个程序,问题和我的方案如图,但是按回车却什么都不输出,这是为什么啊,请问哪里错了啊

如题所述

因为题主在内层的第三个 while 循环,也就是

while (p >= 1) {
    x = i / p;
    i = i - p * x;
    p = p / 10;
    sum = sum + x * x;
}

中改变了全局变量 i 的值,而 i 不仅是输出结果,还是最外层 while 循环的计数器,所以这个值一旦被改变整个循环就会混乱,最后出现死循环,导致程序无限运行无法输出结果。所以题主需要一个 i 的副本来完成上述循环,而不改变 i 本身的值。


另一点,题主的 sum 变量是全局的,所以每执行一次最外层循环后就必须将其清零,否则 sum 的值会累加,造成计算各位数字之和时出现错误。


还有,题主的变量 p, t, len 等我感觉没有太多必要,可以用 l 的值来代替。以下是我写的一个修改版本,供题主参考。

#include <stdio.h>

int main() {

int n, m;
int num, num_len, num_cpy, multiplier, 
digit, sum, counter, quotient;

printf("Please Enter Two Integers: ");
scanf("%d %d", &n, &m);

num = 1;
counter = 0;

while (num <= n) {

// 清零平方和
sum = 0;

// 清零分解因数
multiplier = 1;

// 制作变量 num 的副本 num_cpy
num_cpy = num;

while ((num / multiplier) != 0) {
multiplier = multiplier * 10;
}

// 此处 multiplier 相当于题主原先的 p
multiplier = multiplier / 10;

while (multiplier >= 1) {
digit = num_cpy / multiplier;
// i = i - p * x 可直接写为 i = i % p
num_cpy = num_cpy % multiplier;
multiplier = multiplier / 10;
sum = sum + digit * digit;
}

quotient = num / m;

if (quotient == sum) {
counter = counter + 1;
if (counter % 5 == 0)
printf("%d\n", num);
else 
printf("%d\t", num);
}

num++;

}

return 0;

}


运行结果如下:



还有一点建议,题主以后最好避免使用一些简单字母作为变量名称,尤其在变量比较多的情况下。否则在别人看起来会比较费劲,或者也可以给变量加一些注释来注解。

温馨提示:答案为网友推荐,仅供参考