大整数相加

#include <iostream>
#include <string>
/*project:两个大整数相加 
**@author:浅滩 
**data:2019.05.15 
*/

using namespace std;
void add(const string &,const string &);
int main()
{
string str1,str2; 
cin>>str1>>str2;
if(str1.size()>=str2.size())//我不知道为什么这莫该就ac通过了,一脸懵逼 
add(str1,str2);
else add(str2,str1);
}

void add(const string &str1,const string &str2)
{

int *num1=new int [str1.size()];
int *num2=new int [str2.size()];
int result_size;
//const int len=(str1.size()>str2.size()? str1.size():str2.size());
int result[10000];
fill(result,(result+10000),0);//初始化结果数组

for(int i=0;i<str1.size();i++)//字符串到整数数组的转换 
num1[i]=str1[i]-'0'; 
for(int i=0;i<str2.size();i++)
num2[i]=str2[i]-'0';
int s1=str1.size()-1,s2=str2.size()-1,k=(str1.size()>str2.size()? str1.size():str2.size())-1;
cout<<k+1;
while(s1>=0&&s2>=0)
{
result[k]=num1[s1]+num2[s2];
k--;s1--;s2--;
}

while(s1>=0)
{
result[k]+=num1[s1];
k--;s1--;
}
while(s2>=0)
{
result[k]+=num1[s2];
k--;s2--;
}
// cout<<k+1;return;
result_size=(str1.size()>str2.size()? str1.size():str2.size())-1;
for(int i=result_size;i>k+1;i--)//从后向前进位 
{
result[i-1]+=result[i]/10;
result[i]=result[i]%10; 
}
//cout<<result_size<<endl;
for(int i=k+1;i<=k+1+result_size;i++)
cout<<result[i]; 
}
//之前的bug是下面这组测试数据 
//456 98949444184
// 9683087243640
//98949444184 456结果不相同

 上面代码是之前牛客网上的题解

 

 思路都一样,用StringBuffer或者StringBuilder比String快很多

class Solution {
    public String addStrings(String num1, String num2) {
        int carry = 0;
        int num1Len = num1.length(),num2Len = num2.length();
        StringBuffer res =  new StringBuffer("");
        for(int i=num1Len-1,j=num2Len-1;i>=0||j>=0;i--,j--){
            int x = i >= 0? num1.charAt(i)-'0':0;
            int y = j >= 0? num2.charAt(j)-'0':0;
            int sum = x + y + carry;
            res.append(sum % 10); 
            carry = sum / 10;
        }
        if(carry > 0) res.append(1);
        return res.reverse().toString();
    }
}

 

posted @ 2019-05-20 00:03  浅滩浅  阅读(102)  评论(0编辑  收藏  举报