题目说明
思路解释
不像许多答案那样简洁,这里给出我的朴实解答。
就是直接模拟。先通过循环来求有几位数。
然后对每位数字和数位进行直接比较,符合的二进制转十进制累加即可。
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n); // 输入一个整数 n
int sub=n; // 用于保存 n 的副本
int digit_sum=0; // 用于记录 n 的位数总和
// 计算 n 的位数总和
while (sub){
sub/=10;
digit_sum++;
}
int binary_sum=0; // 用于保存最终的二进制和
// 从最高位到最低位,计算二进制和
while (digit_sum){
int current_digit=n/ pow(10,digit_sum-1); // 获取当前位的数字
// 判断当前位数字和位数是否同时为偶数或奇数
if (current_digit%2==0 && digit_sum%2==0 || current_digit%2 && digit_sum%2)
binary_sum+= pow(2,digit_sum-1); // 更新二进制和
n-= pow(10,digit_sum-1)*current_digit; // 剔除当前位数字
digit_sum--; // 减少位数
}
printf("%d",binary_sum); // 输出最终的二进制和
return 0;
}