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