大数相加问题 POJ1503

    xiaoxiao2025-03-18  11

    大数加法的模板,关键点是如何处理进位,以及两个数字长度不一致的问题。题目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
    最新回复(0)