#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++);
| 当前位的二进制值(0或1) |
| 计算10的i次方,确定当前位的权重(个位、十位、百位...) |
| 先使用当前i的值计算位权,再将i自增1(为下一位做准备) |
| 将当前位的值(0或1)乘以其位权后累加到最终结果中 |
执行示例(输入n = 123
)
- 初始状态
result
= 0, i = 0 - 第一轮循环(处理个位3)
number
= 1(3是奇数)pow(10, 0) = 1result
+= 1 * 1 → ret = 1 i 自增为1 - 第二轮循环(处理十位2)
number
= 0(2是偶数)pow(10, 1) = 10result
+= 0 * 10 → ret = 1 i 自增为2 - 第三轮循环(处理百位1)
number
= 1(1是奇数)pow(10, 2) = 100result
+= 1 * 100 → ret = 101 i 自增为3
最终输出:101