天天看点

1136 A Delayed Palindrome (20分)

非回文数字可以通过一系列操作与回文数字配对。首先,将非回文数字反转,并将结果添加到原始数字中。如果结果不是回文数字,则重复此操作,直到给出回文数字为止。这样的数字叫做延迟回文。给一个数字判断是否可以在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.");
}
           
PAT