一开始写这道题的时候忘记了最高位进位导致乘2后的数字位数增加一位的情况。
#include<stdio.h> #include<string.h> #define Max_size 21 int main(void) { char str[Max_size]; int double_str[Max_size]; long a=0; int flag=0; gets(str); int n=strlen(str); int double_n=n; int mark=1; for(int i=n-1;i>=0;i--) { int temp=str[i]-'0'; if((temp*2-10)>=0) { double_str[i]=temp*2-10+flag; flag=1; } else { double_str[i]=temp*2+flag; flag=0; } if(i==0&&flag==1) { for(int j=n;j>=1;j--) double_str[j+1]=double_str[j]; double_str[0]=1; double_n++; mark=0; } } //判断字符串中相同字符的个数是否相等,我想到了哈希映射 int judge[10]={0}; for(int i=0;i<n;i++) ++judge[str[i]-'0']; if(double_n==n) { for(int i=0;i<n;i++) { if(--judge[double_str[i]]<0) { mark=0; break; } } } if(mark==0) printf("No\n"); else printf("Yes\n"); for(int i=0;i<double_n;i++) printf("%d",double_str[i]); return 0; }