大整数加法
最开始我以为long long就足够了,结果提交的时候有两个测试点没通过,紧接着我考虑用大整数加法,但是第一遍提交还是错了,我以为代码写错了,后来发现是数组开小了。
#include<cstdio>
int arr[200],b[200];
long long n,K;
bool check(int k){
for(int j=0;j<=k/2;j++){
if(arr[j]!=arr[k-1-j]) return false;
}
return true;
}
void pal(long long x){
int k=0;
do{ //先转换为数组 存的结果也为逆序678 存为876
arr[k++]=x%10;
x=x/10;
}while(x!=0);
int cnt=0;
while(!check(k) && cnt < K){
cnt++;
int c=0;
for(int j=0;j<k;j++){ //正序和逆序相加 大整数加法是先反转后相加,相加后再反转
int tmp=arr[j]+arr[k-1-j] + c;
c = tmp / 10;
b[j] = tmp % 10;
}
if(c==1) b[k++]=1; //最后有进位的情况
for(int j=k-1;j>=0;j--){ //反转元素
arr[k-1-j]=b[j];
}
}
for(int j=0;j<k;j++){
printf("%d",arr[j]);
}
printf("\n%d",cnt);
}
int main(){
scanf("%lld%lld",&n,&K);
pal(n);
return 0;
}