非回文数字可以通过一系列操作与回文数字配对。首先,将非回文数字反转,并将结果添加到原始数字中。如果结果不是回文数字,则重复此操作,直到给出回文数字为止。这样的数字叫做延迟回文。给一个数字判断是否可以在10轮以内和他的反转数相加得到回文数。
如果一个数一开始就是回文数,那就直接输出is a palindromic number。因为给的数字不超过1000位,所以要用string计算。
#include <bits/stdc++.h>
using namespace std;
bool isPal(string s){
string str1=s;
reverse(str1.begin(),str1.end());
return str1==s;
}
bool itera(string &s){
string str1=s;
reverse(str1.begin(),str1.end());
string sum=str1;
int len=strlen(sum.c_str());
for(int i=len-1;i>=0;i--){
sum[i]+=s[i]-'0';
if(sum[i]>=10+'0'){
sum[i]-=10;
if(i!=0)sum[i-1]+=1;
else sum.insert(0,1,'1');
}
}
printf("%s + %s = %s\n",s.c_str(),str1.c_str(),sum.c_str());
s=sum;
return isPal(s);
}
int main(){
string s;
cin>>s;
if(isPal(s)){
printf("%s is a palindromic number.",s.c_str());
return 0;
}
for(int i=0;i<10;i++){
if(itera(s)){
printf("%s is a palindromic number.",s.c_str());
return 0;
}
}
printf("Not found in 10 iterations.");
}