题目:超长正整数相加
描述 | |
---|---|
知识点 | 字符串 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入两个字符串数字 |
输出 | 输出相加后的结果,string型 |
样例输入 | 99999999999999999999999999999999999999999999999999 1 |
样例输出 | 100000000000000000000000000000000000000000000000000 |
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1,s2;
cin>>s1;
cin>>s2;
int lenmax,lenmin;
if(s1.size()>s2.size())
{
lenmax=s1.size();
lenmin=s2.size();
}
else
{
lenmax=s2.size();
lenmin=s1.size();
}
string s3=s2.size()>s1.size()?s2:s1;
char add;
int num1,num2,num;
int len1=s1.size(),len2=s2.size();
int flag=0;//进位标志
for(int i=1;i<=lenmin;++i)
{
num1=s1[len1-i]-'0';
num2=s2[len2-i]-'0';
num=num1+num2+flag;
if(num>=10)
{
s3[lenmax-i]=num-10+'0';
flag=1;
}
else
{
s3[lenmax-i]=num+'0';
flag=0;
}
}
if(lenmax==lenmin&&flag==1)//对两个字符串等长的情况,如果最高位有进位,先输出最高位1。
cout<<flag;
else
{
while(flag)
for(int i=lenmax-lenmin-1;i>=0;i--)
{
if(i==0&&s3[i]=='9'&&flag==1)//如果两个字符串不等长,较长串最高位为9且有进位,先输出最高位1
{
cout<<flag;
s3[i]='0';
flag=0;
break;
}
num=s3[i]+flag-'0';
if(num>=10)//对较长字符串超出较短字符串的部分,只有两种可能,要么小于9,不需要进位;要么等于9,向高位进位后(flag=1),该位赋值‘0’
{
flag=1;
s3[i]='0';
}
else
{
flag=0;
s3[i]=s3[i]+1;
break;
}
}
}
cout<<s3<<endl;
//system("pause");
return 0;
}