1024 Palindromic Number (25 分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SYaoJun/article/details/87347937

大整数加法
最开始我以为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;
}

猜你喜欢

转载自blog.csdn.net/SYaoJun/article/details/87347937
今日推荐