C语言循环内变量存储与更新方法及数字平方和计算问题
问题描述
我是计算机专业大一新生,刚接触C语言编程,正在完成一项作业:计算用户输入数字的各位数字平方和,要求输出格式如下:
Number: 1234 n=1234; sum=16 n=123; sum=25 n=12; sum=29 n=1; sum=30 Result: 30
我大致有了思路,但不清楚如何在循环内存储、更新变量值并输出结果。以下是我编写的代码:
int main() { int num,i,sum=0,result,square; printf("Calculate the sum of the square of the digits of a number\n" ); printf("Number:"); scanf("%d", &num); i=0; while(num>i) { sum=num%10; square=sum*sum; printf("\nn=%d; sum= %d",num,square); num=num/10; } result=sum; printf("\nResult: %d",sum); return 0; }
请问如何实现各位平方和的累加,并按照示例格式输出?
解决方案
你的代码核心问题是没有正确累加平方和,且循环逻辑、输出内容不符合要求,以下是修正方案:
问题分析
- 你把
sum直接赋值为当前数字的最后一位(sum=num%10),而非将平方值累加到sum中,导致sum始终是单个数字,无法得到累加结果。 - 输出的
sum应该是到当前步骤的累计平方和,而非单个数字的平方。 - 循环条件里的
i=0完全多余,直接判断num>0即可——当数字被除至0时,所有位数已处理完毕。
修正后的代码
#include <stdio.h> int main() { int num, sum = 0; printf("Calculate the sum of the square of the digits of a number\n"); printf("Number: "); scanf("%d", &num); while (num > 0) { int digit = num % 10; // 提取当前数字的最后一位 sum += digit * digit; // 将当前位的平方累加到总和 printf(" n=%d; sum=%d\n", num, sum); // 输出当前数字和累计平方和 num = num / 10; // 移除最后一位数字 } printf("Result: %d\n", sum); return 0; }
关键说明
- 累加逻辑:用
sum += digit * digit替代直接赋值,确保每次循环都将当前位的平方加入总和。 - 循环条件:
while(num>0)更直观,当数字被除到0时自动终止循环。 - 格式匹配:输出内容严格对应示例要求,每次打印当前剩余数字和累计平方和,最后输出最终结果。
- 变量简化:删除了
i、result、square等冗余变量,让代码更简洁易懂。
测试输入1234时,输出将与示例完全一致:
Calculate the sum of the square of the digits of a number Number: 1234 n=1234; sum=16 n=123; sum=25 n=12; sum=29 n=1; sum=30 Result: 30
内容的提问来源于stack exchange,提问作者Roxmate
相关产品推荐
相关产品推荐

