说明网
电脑网络 1 个回答

C语言中如何遍历数组将每个整数的百位与个位交换后把新数存回原数组?

sxp 提问者

发布于 2026-10-24

问题补充

在C语言中,通过循环遍历数组,利用取模和整除运算分别提取每个整数的百位、十位和个位数字,再将百位与个位互换后重新组合为新整数,最后赋值回原数组对应位置。

1 个回答

按发布时间排序
牧狼 回答者

回答于 2026-10-24

在C语言中,遍历数组并将每个整数的百位与个位交换后存回原数组,核心是通过算术运算分离各位数字并重新组合。

实现步骤

  1. 遍历数组:使用 for 循环逐个访问数组元素。
  2. 提取各位数字:对当前元素 num 进行运算:
    • 个位:num % 10
    • 十位:(num / 10) % 10
    • 百位:(num / 100) % 10
  3. 重新组合:将提取出的个位放到百位的位置,百位放到个位的位置,十位不变。公式为:new_num = (num % 10) * 100 + ((num / 10) % 10) * 10 + (num / 100) % 10
  4. 存回原数组:将 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。

内容由网友提供,仅供参考。