|
方法:用数组表示整数
注意点: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;
}
|