//水题,但是考点不水,可能用的strlen属于string库,但是只能用于字符,不能用数字,因为\0就是0.出现0无法判断,其次二倍时有可能有进位
//第一次在二倍进位上出了问题
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 //freopen("input.txt","r",stdin); 6 char s[30]; 7 int s1[30]; 8 int has[11]; 9 memset(has,0,sizeof(has)); 10 scanf("%s",s); 11 int i,len=strlen(s); 12 for(i=0;i<len;i++) //hash 13 { 14 has[s[i]-'0']++; 15 } 16 int c=0,len1=0; 17 for(i=len-1;i>=0;i--) //计算2倍 18 { 19 int m=c+(s[i]-'0')*2; 20 has[m%10]--; //hash 比较 21 s1[len1++]=m%10; 22 c=m/10; 23 } 24 if(c!=0)s1[len1++]=c; 25 if(len1!=len)printf("No\n"); //进位 26 else{ 27 for(i=0;i<10;i++) 28 if(has[i]!=0)break; //出现次数不一样 29 if(i<10)printf("No\n"); 30 else printf("Yes\n"); 31 } 32 for(i=len1-1;i>=0;i--) //不论yes or no 输出 33 printf("%d",s1[i]); 34 printf("\n"); 35 }