#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(); } }