题目粗心:
给定一个不超过 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;
}