1024 Palindromic Number

Posted CSU迦叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1024 Palindromic Number相关的知识,希望对你有一定的参考价值。

1. 本题给的N的范围是10位以内的整数,但是注意了不知要要和反序列相加多少次,因此大数的int d[]的大小10是远远不够,100才全部AC。

2. 一开始不通过不知道是位数不够,以为是到确定步数停下来的代码写错了,其实通过两个测试用例(一个没到就停下一个到了才停下),就可以放心了。

AC代码

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
#include<stdlib.h>
#include<time.h>

using namespace std;
typedef long long LL;

const int maxn = 10007;
const int MOD = 1000000007;
const int INF = 1000000000;//INF:下确界  
const LL SUP = (1LL<<63)-1;//SUP:上确界 
const double eps = 1e-5;

struct bign{
	int d[100];
	int len;
	
	bign(){
		memset(d,0,sizeof(d));
		len = 0;
	}
};

bool isPalin(bign a){
	if(a.len==1)return true;
	//9 4 0123 8765
	//10 5 01234 98765
	for(int i=0;i<a.len/2;i++){
		if(a.d[i]!=a.d[a.len-1-i]){
			return false;
		}
	}
	return true;
}

bign change(char s[]){
	bign bg;
	bg.len = strlen(s);
	for(int i=0;i<bg.len;i++){
		bg.d[i] = s[bg.len-1-i] - '0';
	}
	
	return bg;
}

bign speAdd(bign a){//特殊的加,自身和自身的倒序进行相加 
	bign b;
	int sum;
	int carry = 0;
	for(int i=0;i<a.len;i++){
		sum = a.d[i] + a.d[a.len-1-i] + carry;
		b.d[b.len++] = sum%10;
		carry = sum / 10; 
	}
	
	if(carry){
		b.d[b.len++] = carry;
	}
	
	return b;
}


int main(){
	
	char s[20];
	int max_stepnum;
	bign a;
	
	scanf("%s %d",s,&max_stepnum);
	
	a = change(s);
	
	int cnt = max_stepnum;
	
	for(int i=0;i<max_stepnum;i++){

		if(!isPalin(a)){
			a = speAdd(a);
		}else{
			cnt = i;
			break;
		}
		
	}
	
	for(int i=0;i<a.len;i++){
		printf("%d",a.d[a.len-1-i]);
	}
	printf("\\n");
	printf("%d",cnt);
	
	return 0;
}

以上是关于1024 Palindromic Number的主要内容,如果未能解决你的问题,请参考以下文章

PAT甲级1024 Palindromic Number (25 分)

1024 Palindromic Number (25)

1024 Palindromic Number (25 分)

PAT 1024 Palindromic Number

1024 Palindromic Number (25分)

1024 Palindromic Number (25分)