1. 问题分析与解法思路
数字求和问题看似简单,但其中蕴含着计算机处理数字的基本原理。我们需要解决的问题是:给定一个正整数,计算其各位数字之和。比如输入123,输出6(1+2+3)。
1.1 数字分解的基本原理
在计算机中,数字是以二进制形式存储的,但当我们处理数字的各位时,十进制表示更为直观。要获取一个数字的各位,可以利用模运算(%)和除法运算(/)的特性:
- n%10:获取数字n的最后一位
- n/10:去掉数字n的最后一位
这个过程类似于我们手工分解数字的方式。例如,对于数字123:
- 123%10=3(获取个位)
- 123/10=12(去掉个位)
- 12%10=2(获取十位)
- 12/10=1(去掉十位)
- 1%10=1(获取百位)
- 1/10=0(终止条件)
1.2 算法设计思路
基于上述原理,我们可以设计如下算法:
- 初始化sum=0
- 当n>0时循环:
a. sum += n%10(累加最后一位)
b. n = n/10(去掉最后一位) - 输出sum
这个算法的时间复杂度是O(d),其中d是数字的位数。对于n<20000的情况,最多5位数字,效率非常高。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 代码实现与解析
2.1 完整代码展示
cpp复制#include <iostream>
using namespace std;
int main() {
int n;
while(cin >> n) {
int sum = 0;
while(n) {
sum += n%10;
n /= 10;
}
cout << sum << endl;
}
return 0;
}
2.2 代码逐行解析
#include <iostream>:引入标准输入输出库using namespace std;:使用标准命名空间int main():程序主函数while(cin >> n):循环读取输入,直到没有更多输入int sum = 0;:初始化求和变量while(n):
