题解
数位分离
1 条题解
-
0
解题思路
输入一个两位数,把它的十位和个位拆开,再相加输出。比如 45:十位是 4,个位是 5,4+5=9。
怎么拆分一个两位数 n?这里要用到两个运算符:
- 十位:
n / 10。整数除以 10 会把个位抹掉,商就是十位。例如 45/10=4。 - 个位:
n % 10。取余运算得到整除后的余数,例如 45%10=5。
为什么
%能拿到个位?因为任意两位数都可以写成十位×10 + 个位的形式,除以 10 的余数正好就是那个个位。两个运算符配合使用,就能把一个数字“拆”成它的每一位。然后算
n / 10 + n % 10,就是十位加个位的结果。题目保证输入的一定是两位数,所以不用额外判断;如果输入的不是两位数,这套方法就不适用了,这也是题目给范围的原因。/和%这对运算符是“数位分离”的万能钥匙,以后凡是碰到“拆数字”的题(拆个位、十位、百位),都用它们。参考代码
#include <iostream> using namespace std; int main() { int n; // n:输入的两位数 cin >> n; // 读入两位数 int ge; // ge:个位数字 int shi; // shi:十位数字 ge = n % 10; // 对10取余,得到个位 shi = n / 10; // 除以10,去掉个位,得到十位 cout << shi + ge << endl; // 输出十位加个位的和 return 0; }复杂度分析
对任意一个两位数,都只做两次运算(一次整除、一次取余)和一次加法,运算次数是固定的。所以时间复杂度是 O(1)。
空间上只用了 3 个 int 变量,空间复杂度也是 O(1)。
如果推广到 k 位数,要把每一位都拆出来,需要做 k 次整除和取余,复杂度就是 O(k);但本题固定是两位数,所以是 O(1)。
- 十位:
- 1