本题采用了柳神的写法,在此地方进行第一次标注解释,字符相加减时的数字此时为字符形式,而不是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;
}
本文介绍了一种使用C++实现字符串加法的方法,特别适用于大整数运算,并探讨了如何判断一个数是否为回文数。通过示例代码,详细解释了在ASCII码环境下,字符相加减的操作技巧,以及如何处理进位和反转字符串等关键步骤。
855

被折叠的 条评论
为什么被折叠?



