大数加法的模板,关键点是如何处理进位,以及两个数字长度不一致的问题。题目POJ1503
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
string largeNum[105];
string add(string a,string b){
string ans = "";
if(a.length()<b.length()){//交换两个数字的位置,使得a的长度大于b
string temp = a;
a = b;
b = temp;
}
int carry = 0;
for(int i=b.length()-1;i>=0;i--){
int j = i+a.length()-b.length();//b指针
int tmpans = b[i]-'0'+a[j]-'0'+carry;
if(tmpans>=10){
tmpans-=10;
carry = 1;
}else{
carry = 0;
}
ans = (char)(tmpans+'0')+ans;
}
for(int i = a.length()-b.length()-1;i>=0;i--){//解决数字长度不一致的问题。
int tmpans = a[i]-'0'+carry;
if(tmpans>=10){
tmpans-=10;
carry = 1;
}else{
carry = 0;
}
ans = (char)(tmpans+'0')+ans;
}
if(carry == 1){
ans = "1"+ans;
}
return ans;
}
int main(){
string a;
int pos = 0;
while(cin>>a && a!="0"){
largeNum[pos++] = a;
}
string sum = "0";
for(int i=0;i<pos;i++){
sum = add(sum,largeNum[i]);
}
cout<<sum<<endl;
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-1297165.html