题目链接
呐,一看要用大数运算,谁不想偷个懒呢,所以直接用string转long long int ,long long int 转string
成功骗到18分,如果在考试的时候,对我来说拿到18分就可以溜了,哈哈哈
![](https://i-blog.csdnimg.cn/blog_migrate/ae45df9c8ab2ab456c0bce0ae47eef1d.png)
AC代码:
#include<cstdlib>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<sstream>
using namespace std;
bool check(string k)
{
string k1=k;
reverse(k.begin(),k.end());
for(int i=0;i<k1.size();i++)
{
if(k[i]!=k1[i])
return false;
}
return true;
}
int a[100000];
int main()
{
string k;
stringstream ss;
cin>>k;
long long int num;
long long int cnt=0;
while(check(k)==false)
{
string k1,k2;
cnt++;
if(cnt>10)
{
cout<<"Not found in 10 iterations.";
return 0;
}
cout<<k<<" + ";
k1=k;
reverse(k.begin(),k.end());
cout<<k<<" = ";
memset(a,0,sizeof(a));//置空,模拟数加法
for(int i=0;i<k.size();i++)
{
a[i+1]=(k[i]-'0')+(k1[i]-'0');//从1号位开始,防止进位
}
int jin=0;
for(int i=k.size();i>=0;i--)
{
a[i]=a[i]+jin;
if(a[i]>9)
{
a[i]-=10;//数不会超过19,所以进位最多进1
jin=1;
}
else
{
jin=0;
}
}
int beg;
if(a[0]!=0)//判断进位
beg=0;
else
beg=1;
for(int i=beg;i<=k.size();i++)
{
k2+=(a[i]+'0');//转换成字符串
}
k=k2;
cout<<k<<endl;
}
cout<<k<<" is a palindromic number."<<endl;
return 0;
}
偷懒代码:
![](https://i-blog.csdnimg.cn/blog_migrate/79d5f85a2f7304164787d4584961f4f9.png)
偷懒解法:
#include<iostream>
#include<string>
#include<algorithm>
#include<sstream>
using namespace std;
bool check(string k)
{
string k1=k;
reverse(k.begin(),k.end());
for(int i=0;i<k1.size();i++)
{
if(k[i]!=k1[i])
return false;
}
return true;
}
int main()
{
string k;
stringstream ss;
cin>>k;
long long int num;
long long int cnt=0;
while(check(k)==false)
{
long long int n1;
long long int n2;
long long int n3;
cnt++;
if(cnt>10)
{
cout<<"Not found in 10 iterations.";
return 0;
}
cout<<k<<" + ";
n1=atoi(k.c_str());
reverse(k.begin(),k.end());
cout<<k<<" = ";
n2=atoi(k.c_str());
n3=n2+n1;
ss<<n3;
k=ss.str();
ss.str("");
ss.clear();
cout<<k<<endl;
}
cout<<k<<" is a palindromic number."<<endl;
}