#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
using namespace std;
string add(string a,string b)
{
string flag;//和的字符串保存在flag里面
int lena=0,lenb=0;//lena为字符串a的长度,lenb为字符串b的长度
int x=0,y=0,i;//x为字符串a每一位的字符转成整型后的数,
int temp=0,count=0;//count为进位,temp为加后数字的个位数
lena=a.length();//取字符串的长度
lenb=b.length();
if(lena>lenb)//a的长度长,在b前面补上0
{
for(i=1;i<=lena-lenb;i++)//补上lena-lenb个0
{
b="0"+b;//注意这个“0”+b的位置(不能交换)。这里的+相当于字符串的连接
}
}
else//在a的前面补0
{
for(i=1;i<=lenb-lena;i++)
{
a="0"+a;
}
}
lena=a.length();
for(i=lena-1;i>=0;i--)//遍历字符串,为了做加法
{
x=a[i]-'0';
y=b[i]-'0';
temp=x+y+count;
count=temp/10;//进位
temp=temp%10;//做过加法后的个位数
flag=(char)(temp+'0')+flag;//把个位数的整形转换为字符型
}
if(count!=0)//存在进位(这里终于懂了)
{
flag=(char)(count+48)+flag;
}
return flag;//返回加后的字符串
}
int main()
{
string a,b,c;
cin>>a>>b;
c=add(a,b);
cout<<c<<endl;
//printf("%s",c);这个输出是错的
return 0;
}
备注:
l 定义三个字符串,一个用来存加数a,一个存加数b,另一个存结果c
l 字符串的输入和输出都用C++
l 定义字符串:string
a;
l 取字符串的长度:len=a.length();
l 进位count:temp/10 相加后的个位数:temp=temp%10;
l 这道题目又用到了字符串中的+:在金福传中a+b相当于把字符串a和b连接起来(注意a和b的位置),a+b与b+a是有区别的。
l str1=“0”+str1;就是在字符串str1的前面补0
l 把整型变成字符型:+‘0’ 把字符型变成整型:-‘0’
l 做高精度加法的时候,在较短的那个加数前添上0,补成一样长,方便计算。