18分答案
如果两个数的和过大,就会报错如下:
terminate called after throwing an instance of 'std::out_of_range' what(): stoll
原因:应该是超出了long long int x+y 的范围。
#include <bits/stdc++.h>
using namespace std;
bool paliNum(string s){
string v=s;
reverse(s.begin(),s.end());
if(v==s) return true;
else return false;
}
string add(string s){
long long int x=stoll(s);
reverse(s.begin(),s.end());long long int y=stoll(s);
return to_string(x+y);
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
string s;
int cnt=0;
cin>>s;
if(paliNum(s)) cout<<s+" is a palindromic number."<<endl;
else{
while(!paliNum(s)){
cnt++;
cout<<s<<" + ";
reverse(s.begin(),s.end());
cout<<s<<" = ";
s=add(s);
cout<<s<<endl;
/*if(cnt==10){
cout<<"Not found in 10 iterations."<<endl;
return 0;
}*/
}
cout<<s+" is a palindromic number."<<endl;
}
return 0;
}
AC题解
抄了柳神的加法函数,就是简单的每位对应相加,存储在字符串里。
#include <bits/stdc++.h>
using namespace std;
bool paliNum(string s){
string v=s;
reverse(s.begin(),s.end());
if(v==s) return true;
else return false;
}
string add(string s){
string a=s,ans;
reverse(a.begin(),a.end());
int len=a.length(),carry=0;
for(int i=0;i<len;i++){
int num=(a[i]-'0'+s[i]-'0')+carry;
carry=0;
if(num>=10){
carry=1;
num=num-10;
}
ans+=char(num+'0');
}
if(carry==1) ans+='1';
reverse(ans.begin(),ans.end());
return ans;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
string s;
int cnt=0;
cin>>s;
if(paliNum(s)) cout<<s+" is a palindromic number."<<endl;
else{
while(!paliNum(s)){
cnt++;
cout<<s<<" + ";
reverse(s.begin(),s.end());
cout<<s<<" = ";
s=add(s);
cout<<s<<endl;
if(cnt==10){
cout<<"Not found in 10 iterations."<<endl;
return 0;
}
}
cout<<s+" is a palindromic number."<<endl;
}
return 0;
}