Version 2: 模拟加法(http://blog.csdn.net/yhhhyfyy/article/details/8594868)
#include<iostream>
#include<string>
#include<algorithm> //reverse函数用到
using namespace std;
string add(strings1,string s2)
{
stringresult="";
int carry=0;
intlen=s1.length();
intsum;
while(len--)
{
sum=s1[len]-'0'+ s2[len]-'0'+carry;
result.insert(result.begin(),sum%10+'0');
carry=sum/10;
}
if(carry) //最终和有进位
{
result.insert(result.begin(),carry+'0');
}
returnresult;
}
int main()
{
string s1,s2,result; //s1作为输入,s2是翻转后的字符串
int k,ans=0; //ans保存翻转求和次数
cin>>s1>>k;
while (ans!=k)
{
s2=s1;
reverse(s2.begin(),s2.end());
if (s1==s2) //若回文
{
break;
}
else //否则继续翻转求和
{
s1=add(s1,s2);
}
ans++;
}
cout<<s1<<endl<<ans<<endl;
return 0;
}
Version 1: case 6 & case 8 内存超限
#include<iostream>
#include<sstream>
#include<string>
#include<algorithm>
using namespace std;
stringstream ss;
int icount=0;
boolisPalindromic(string & s)
{
inti=0;
intj=s.length()-1;
for(;i<j;i++,j--)
{
if(s[i]!=s[j])
returnfalse;
}
returntrue;
}
voidtransform(string & s)
{
longtmp1,tmp2;
ss.clear();
ss<<s;
ss>>tmp1;
ss.clear();
reverse(s.begin(),s.end());
ss<<s;
ss>>tmp2;
ss.clear();
ss<<tmp1+tmp2;
ss>>s;
icount++;
}
int main()
{
stringnum;
intk;
cin>>num>>k;
while(!isPalindromic(num)&& icount<k)
{
transform(num);
}
cout<<num<<endl;
cout<<icount;
return0;
}