题目链接
思路:大整数运算,测试点2,3,4注意坑点:如果输入是回文的话就直接输出
代码:
#include<bits/stdc++.h>
using namespace std;
struct bign{
int d[100005];
int len;
bign(){
memset(d,0,sizeof(d));
len=0;
}
};
bign change(string s){
bign a;
a.len=s.length();
for(int i=0;i<a.len;i++){
a.d[i]=s[a.len-i-1]-'0';
}
return a;
}
bign add(bign x,bign y){
int carry=0;
bign c;
for(int i=0;i<x.len||i<y.len;i++){
int temp=x.d[i]+y.d[i]+carry;
c.d[c.len++]=temp%10;
carry=temp/10;
}
if(carry!=0){
c.d[c.len++]=carry;
}
return c;
}
string tos(bign x){
string s="";
for(int i=x.len-1;i>=0;i--){
s+=x.d[i]+'0';
}
return s;
}
bool check(string s){
for(int i=0;i<s.length()/2;i++){
if(s[i]==s[s.length()-i-1]){
continue;
}else return false;
}
return true;
}
int main(){
string x,y;
cin>>x;
if(check(x)){//注意如果输入是回文的话就直接输出
printf("%s is a palindromic number.\n",x.c_str());
return 0;
}
int n=10;
while(n--){
y=x;
reverse(y.begin(),y.end());
bign xx=change(x);
bign yy=change(y);
bign zz=add(xx,yy);
string z=tos(zz);
printf("%s + %s = %s\n",x.c_str(),y.c_str(),z.c_str());
if(check(z)){
printf("%s is a palindromic number.\n",z.c_str());
return 0;
}
x=z;
}
printf("Not found in 10 iterations.\n");
return 0;
}