题目描述:
输入一个整数n,输出它的各位数字之和
输入输出格式:
输入格式:
输入一个整数n
输出格式:
输出一个整数,表示n的各位数字之和
样例输入输出
样例输入#1:1
3
样例输出#1:1
3
样例输入#2:
1 | 136 |
样例输出#2:1
10
解析
首先我们考虑一个问题:如何获取一个整数的第n位?
如果你没有思路,我们先把问题特殊化:如何获取一个整数的第1位,也就是个位数字?
首先,我们先详细介绍一下模运算和整除运算:
模运算,读作模,C++中的运算符为“%”。它的意义便是小学数学中的取余数
整除运算,读作整除,C++中的运算符为“/”(想不起来翻笔记去)。它的意义便是小学数学中和取余数一起出现的那个。。。
带大家回顾一下小学的带余数除法吧:
15 ÷ 2 = 7 …… 1
8 ÷ 4 = 2 …… 0
4 ÷ 9 = 0 …… 4
ps:如果你感觉自己上了假小学,那我没办法救你的呀。。。
所以,将上面的式子用我们今天的知识写出来,就是这样的:
15 / 2 = 7 15 % 2 = 1
8 / 4 = 2 8 % 4 = 0
4 / 9 = 0 4 % 9 = 4
为什么要提模运算呢?
我们发现,一个数的个位数等于这个数模10
eg:4 % 10 = 4
256 % 10 = 6
是不是很神奇!
但是我们的问题还是没有解决,我们只获取了个位,那其他位的数字怎么办?
我比较懒,所以我想到了:如果其他位也能变成个位该多好。。。
所以,现在我们思考,怎么把其他位变为个位
我们想到了整除运算:
eg:46 / 10 = 4
2775 / 100 = 27
天哪,一个整数整除10之后,十位变成了个位;整除100后,百位变成了个位;整除$ 10^{i - 1} $之后,第i位变成了个位!
综上,如果我们把一个整数n从右向左数第i位数字记为ai的话,则:
$ ai = (n / 10^{i-1}) $ % $ 10 $
小白:老师,指数怎么算。。
我们可以不用算指数
结合上面的知识,观察并理解下面一个过程:
1256 % 10 = 6 1256 / 10 = 125
125 % 10 = 5 125 / 10 = 12
12 % 10 = 2 12 / 10 = 1
1 % 10 = 1 1 / 10 = 0
如果你理解了这样的过程,那么你就能理解下面的代码了
标程
1 |
|