回文数,用字符串相加,设置一个进位存储
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <cstdio> #include <cstring> char n[200]; int k; bool ispal(char *s){ for(int i=0;i<strlen(s)/2;i++) if(s[i]!=s[strlen(s)-i-1]) return false; return true; } void add(char *s){ char sum[200]; int m=strlen(s); for(int i=m-1;i>=0;i--) sum[i]=s[m-i-1]; int c=0; for(int i=0;i<m;i++){ sum[i]+=s[i]-48+c; if(sum[i]>'9'){ c=1; sum[i]-=10; } else c=0; } if(c){sum[m]='1';m++;} for(int i=0;i<m;i++) s[i]=sum[m-1-i]; s[m]=0; } int main(){ scanf("%s%d",n,&k); int i; for(i=0;i<k;i++){ if(ispal(n)) break; add(n); } printf("%s\n%d",n,i); return 0; } |