题目大意:
给定一个不超过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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。