#include <stdio.h>
int main() {
int num, result = 0, digit = 1;
scanf("%d", &num);
while (num > 0) {
int remainder = num % 10; // 取出最低位的数字
int bit = remainder % 2; // 判断奇偶性
result += bit * digit; // 将奇偶性转换为0或1,并加到结果中
digit *= 10; // 更新位数
num /= 10; // 去掉最低位
}
printf("%d", result);
return 0;
}
中等题确实有难度,首先刚开始在他的输出上理解错误了,我以为只是对每一位去进行判断,当输入22222时,结果是0,我又以为是数字前后位相等时,只用输出1位数字就行,把相同的数给忽略,后面正常输出。思绪逐渐极端,开始拆东墙补西墙。以下为原先代码。
#include <stdio.h>
#include <math.h>
int main() {
int num,sum=0,i=0,j,k;
int t; //依次提取的每一位数
scanf("%d",&num);
k=num;
//判断输入了几位数
while (k) {
k=k/10;
i++;
}
//生成和输入相同位数的1
for(j=i-1;j>=0;j--){
sum+=(int)(i/pow(10,j))*1;
}
j=0;
//判断输入的数
if(num==sum){ //如果输入的数全为1时,输出一个数1
printf("1");
}else if(num==sum*2){ //如果输入的数全为2时,输出一个数2
printf("0");
}else { //如果输入的数不是全部相同,则输出奇偶数对应的1和0
for(j=i-1;j>=0;j--){
t=(int)(num/pow(10,j))%10;
if(t%2==1){
printf("1");
}else if(t%2==0){
printf("0");
}
}
}
return 0;
}

京公网安备 11010502036488号