#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;
}