给定两个超大整数,求它们的和,整数的位数为1到1000位
解题思路:
1.首先调整字符串的长度,使两个整数字符串的长度一样,在长度小的字符串前面添加‘0’,然后按位相加,将结果保存在原来较长的字符串中。
2.从后向前遍历相加后的字符串,对于和大于’9’的字符减10,并将其前一位加1.
3.对于字符串中的第一字符要考虑相加进位的情况。
#include<iostream>
#include<string>
using namespace std;
void BigPlus(string a,string b)
{
string::size_type len,n;
if(a.size()>=b.size())
{
len=a.size();
n=a.size()-b.size();
b.insert(b.begin(),n,'0');
}
else
{
len=b.size();
n=b.size()-a.size();
a.insert(a.begin(),n,'0');
}
for(int i=len-1; i>=0; i--)
{
a[i]=a[i]+b[i]-'0';
}
for(int i=len-1; i>0;i--)
{
if(a[i]>'9')
{
a[i]-=10;
a[i-1]++;
}
}
if(a[0]>'9')
{
a[0]-=10;
a.insert(a.begin(),'1');
}
cout<<a<<endl;
}
void BigPlus2(string a,string b)
{
string s1,s2;
int i,len1,len2;
if(a.size()>=b.size())
{
s1=a;
s2=b;
}
else
{
s1=b;
s2=a;
}
len1=s1.size();
len2=s2.size();
for(i=len2-1;i>=0;i--)
s1[len1-1-i]=s1[len1-1-i]+s2[len2-1-i]-'0';
for(i=len1-1;i>0;i--)
{
if(s1[i]>'9')
{
s1[i]-=10;
s1[i-1]++;
}
}
if(s1[0]>'9')
{
s1[0]-=10;
s1.insert(s1.begin(),'1');
}
cout<<s1<<endl;
}
int main()
{
string str1,str2;
while(cin>>str1>>str2)
BigPlus2(str1,str2);
return 0;
}
程序运行结果
