题解
交换两位整数的十位和个位
1 条题解
-
0
解题思路
题目给一个两位数,比如 26,要我们把十位和个位交换,得到 62。
怎么把十位和个位分开?这里要用到两个运算:整除 / 和取余 %。
- 个位:一个数除以 10 的余数。26 % 10 = 6,所以个位是 6。
- 十位:一个数除以 10 的商。26 / 10 = 2,所以十位是 2。
为什么除以 10 就能拆开?因为任何两位数都可以写成"十位 × 10 + 个位"的形式。比如 26 = 2 × 10 + 6。除以 10 取商,十位 2 就浮出来了;取余数,个位 6 就剩下来了。
分离开以后,把原来的个位变成新数的十位,原来的十位变成新数的个位: 新数 = 个位 × 10 + 十位,也就是 6 × 10 + 2 = 62。
边界情况想一想:如果输入的是 10,交换后十位是 0、个位是 1,新数是 0 × 10 + 1 = 1。写成整数就是 1,程序输出 1 是完全正确的,不用专门处理。题目保证输入是 10 到 99 的两位数,所以不用再额外判断。
另外要注意顺序:先算 n % 10 得到个位,再算 n / 10 得到十位,两个数都拿到后再拼成新数,顺序千万不要弄反。
参考代码
#include <iostream> using namespace std; int main() { int n; // 输入的两位数 cin >> n; int ge = n % 10; // 个位:n 除以 10 的余数 int shi = n / 10; // 十位:n 除以 10 的商 int m = ge * 10 + shi; // 个位变成十位、十位变成个位,组成新数 cout << m << endl; // 输出交换后的新数 return 0; }复杂度分析
n 始终是一个两位数,程序只做一次除法、一次取余、一次乘法和一次加法,运算次数固定,和 n 的大小无关。所以时间复杂度和空间复杂度都是 O(1)。
- 1