#include <stdio.h>
#include <math.h>
int main(){
    int result = 0;//累加的结果
    int  i = 0;
    int n = 0;
    int number = 0;
    scanf("%d",&n);
    while (n) {
        number = n % 10;
        if (number % 2 == 1) {//该位置是奇数
            number = 1;
        }
        else {//该位置是偶数
            number = 0;
        }
        result = result + number * pow(10, i++);//result += number * pow(10, i++);
        n = n / 10;
    }
    printf("%d",result);
}

代码解析

result += number * pow(10, i++);

number

当前位的二进制值(0或1)

pow(10, i)

计算10的i次方,确定当前位的权重(个位、十位、百位...)

i++

先使用当前i的值计算位权,再将i自增1(为下一位做准备)

result += ...

将当前位的值(0或1)乘以其位权后累加到最终结果中

执行示例(输入n = 123

  1. 初始状态result = 0, i = 0
  2. 第一轮循环(处理个位3)number = 1(3是奇数)pow(10, 0) = 1 result += 1 * 1 → ret = 1 i 自增为1
  3. 第二轮循环(处理十位2)number = 0(2是偶数)pow(10, 1) = 10 result+= 0 * 10 → ret = 1 i 自增为2
  4. 第三轮循环(处理百位1)number = 1(1是奇数)pow(10, 2) = 100 result += 1 * 100 → ret = 101 i 自增为3

最终输出101