http://pat.zju.edu.cn/contests/pat-a-practise/1024
判断回文数,通过翻转求和若干次将输入变为一个回文数
例:
67 + 76 = 143, and 143 + 341 = 484. 2步
通过本题,掌握c++字符串
#include <iostream>
#include <string>
#include <algorithm> //reverse函数用到
using namespace std;
string add(string s1,string s2)
{
string result="";
int carry=0;
int len=s1.length();
int sum;
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');
}
return result;
}
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;
}