题目粗心:

给定一个不超过1000位的数字A,如果是回文数,就输入A is a palindromic number.否则就计算该数和其逆置数的和如果在10次计算内其后果C是回文数,就输入每一步的计算过程和C is a palindromic number.

算法思路:

因为输出数据不超过1000位,阐明数字的范畴超过了long long,所以得应用string来解决该数字并且编写函数add解决2个字符串的加法操作,并且应用num记录以后计算的次数,只有没有超过10次,就逆置初始字符串s为reverse_s,当s==reverse_s的时候完结层序,否则就取得两数的和c,输入加法操作,而后将s赋值为c,++num。如果退出了循环,阐明无奈在10步计算内失去回文数,输入Not found in 10 iterations.即可。

留神点:

  • 1、int范畴的数据对于最初一个测试点会有运行时谬误

提交后果:

AC代码:

#include<algorithm>#include<string>#include<iostream>using namespace std;string add(const string& a,const string& b){    string s;    int carry = 0;    for (int i = a.size()-1;i>=0;--i) {        int r = (a[i]-'0')+(b[i]-'0')+carry;        s += to_string(r%10);        carry = r/10;    }    if(carry!=0){        s += to_string(carry);    }    reverse(s.begin(),s.end());    return s;}int main(){    string s,reverse_s;    cin>>s;    int num = 0;    while (num<10){        reverse_s = s;        reverse(reverse_s.begin(),reverse_s.end());        if(reverse_s==s){            cout<<s<<" is a palindromic number.";            return 0;        } else {            string c = add(s,reverse_s);            cout<<s<<" + "<<reverse_s<<" = "<<c<<endl;            s = c;            ++num;        }    }    cout<<"Not found in 10 iterations.";    return 0;}