牧狼
回答者
回答于 2026-10-24
在C语言中,遍历数组并将每个整数的百位与个位交换后存回原数组,核心是通过算术运算分离各位数字并重新组合。
实现步骤
- 遍历数组:使用
for循环逐个访问数组元素。 - 提取各位数字:对当前元素
num进行运算:- 个位:
num % 10 - 十位:
(num / 10) % 10 - 百位:
(num / 100) % 10
- 个位:
- 重新组合:将提取出的个位放到百位的位置,百位放到个位的位置,十位不变。公式为:
new_num = (num % 10) * 100 + ((num / 10) % 10) * 10 + (num / 100) % 10 - 存回原数组:将
new_num赋值给arr[i]。
代码示例
#include <stdio.h>
void swapHundredsAndUnits(int arr[], int size) {
for (int i = 0; i < size; i++) {
int num = arr[i];
int units = num % 10;
int tens = (num / 10) % 10;
int hundreds = (num / 100) % 10;
arr[i] = units * 100 + tens * 10 + hundreds;
}
}
适用条件
- 上述逻辑针对三位正整数(100~999)可直接得到预期结果,如123变为321。
- 若数组中包含不足三位的数(如5),按此公式计算结果为
5*100+0+0=500,需根据实际业务需求决定是否加条件判断跳过或补零处理。
常见误区
- 负数处理:直接对负数取模在某些编译器下行为可能不符合预期,应先记录符号,对绝对值操作后再恢复符号。
- 溢出问题:若原数超过三位(如1234),上述公式仅处理低三位,千位及以上会被丢弃,需根据需求扩展位数处理逻辑。
- 混淆指针与值:确保修改的是数组元素的值
arr[i],而非仅修改局部变量num。