题解 | 小乐乐改数字
小乐乐改数字
https://www.nowcoder.com/practice/fcd30aac9c4f4028b23919a0c649824d
#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