本题采用了柳神的写法,在此地方进行第一次标注解释,字符相加减时的数字此时为字符形式,而不是int型,所以add函数里面的carry需要减去‘0’,这个字符本身是在ascll码中是非0的,再做完减法后就是真正的1或者0了,之后的加10也是建立在此基础上。
#include<cstdio>
#include<iostream>
#include<string>
#include <algorithm>
using namespace std;
string s;
void add(string temp)
{
int carry=0;
int len=s.length();
for (int i=0;i<len;i++)
{
s[i]=s[i]+temp[i]+carry-'0';
if(s[i]>'9')
{
carry=1;
s[i]=s[i]-10;
}
else
{
carry=0;
}
}
if(carry==1)
{
s+='1';
}
reverse(s.begin(),s.end());
}
int main()
{
int cnt,i;
cin>>s>>cnt;
for ( i=0;i<cnt;i++)
{
string temp=s;
reverse(temp.begin(),temp.end());
if(s==temp)
break;
else
add(temp);
}
cout<<s<<endl<<i;
}