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 分)