You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

请问如何实现各位平方和的累加,并按照示例格式输出?

解决方案

你的代码核心问题是没有正确累加平方和,且循环逻辑、输出内容不符合要求,以下是修正方案:

问题分析

  1. 你把sum直接赋值为当前数字的最后一位(sum=num%10),而非将平方值累加到sum中,导致sum始终是单个数字,无法得到累加结果。
  2. 输出的sum应该是到当前步骤的累计平方和,而非单个数字的平方。
  3. 循环条件里的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:15:34