切换一个数字的第一个和最后一个位

题目解析

题目要求我们实现对一个数字的第一位和最后一位进行交换,其实本质上是对该数字的位数进行了处理,但在处理中又要求我们只交换第一个和最后一个位数,这也就要求我们需要将数字进行拆分并重组。

解题思路

第一步:数值分解

题目中给定了一个正整数,我们首先需要对这个数字进行分解,把各个位数上的数字单独提取出来,此时需要使用到数学知识中的取模运算。

int num = 12345;

int digits[10];

int digit_count = 0;

while (num > 0) {

digits[digit_count++] = num % 10;

num /= 10;

}

这样,我们就将这个数字分解成了5个数字:

1 2 3 4 5

第二步:交换数字

接下来,我们需要将第一个数字和最后一个数字进行交换,这个步骤非常简单,我们只需要使用第三个变量存储一下即可:

int tmp = digits[0];

digits[0] = digits[digit_count - 1];

digits[digit_count - 1] = tmp;

这样,位于第一位的1就和位于最后一位的5交换位置了,数字的排列变成了:

5 2 3 4 1

第三步:数值重组

最后一步,我们需要对这5个数字进行重组,还原成一个完整的数字。要重组这些数字,我们只需要逐个把他们乘以相应的位数的权重,再加和即可:

int new_num = 0;

int base = 1;

for (int i = digit_count - 1; i >= 0; i--) {

new_num += digits[i] * base;

base *= 10;

}

这样,我们就可以得到最后重组后的数字。

完整代码

#include <iostream>

using namespace std;

int main() {

int num = 12345;

int digits[10];

int digit_count = 0;

while (num > 0) {

digits[digit_count++] = num % 10;

num /= 10;

}

int tmp = digits[0];

digits[0] = digits[digit_count - 1];

digits[digit_count - 1] = tmp;

int new_num = 0;

int base = 1;

for (int i = digit_count - 1; i >= 0; i--) {

new_num += digits[i] * base;

base *= 10;

}

cout << new_num << endl;

return 0;

}

运行结果为:52341

后端开发标签