方法:用数组表示整数
注意点:1,该过程的最大整数超过long long的表示范围;2,N超过int的表示范围
#include <iostream> int index=0; bool judge(int a[]){ for(int i=0;i<index/2;i++){ if(a[i]!=a[index-i-1]) return false; } return true; } void print(int a[],int step){ for(int i=index-1;i>=0;i--) printf("%d",a[i]); printf("\n%d",step); } void addreverse(int a[]){ int b[100]={0},carry=0; for(int i=0;i<index;i++){ b[i]=(a[i]+a[index-i-1]+carry)%10; carry=(a[i]+a[index-i-1]+carry)/10; } if(carry!=0) b[index++]=carry; for(int i=0;i<index;i++){ a[i]=b[i]; } } int main(){ int K,a[100]={0},i; long long N; scanf("%lld%d",&N,&K); while(N){ a[index++]=N%10; N/=10; } for(i=0;i<=K;i++){ if(judge(a)||i==K) break; addreverse(a); } print(a,i); return 0; }