AcWing-高精度加法

发布于:2024-06-26 ⋅ 阅读:(11) ⋅ 点赞:(0)

高精度加法
AC解法,这题思路就是照着代码自己手写一次运行过程就懂了!

#include<bits/stdc++.h>
const int N=100086;
using namespace std;
void add(vector<int>& A,vector<int>& B,vector<int>& C){//该算法是从最后面加起来的
    if(A.size()<B.size()){
        add(B,A,C);
        return;
    }
    int t=0;//表示进位,每次两个数加的变量
    for(unsigned int i=0;i<A.size();++i){
        t+=A[i];
        if(i<B.size()){
            t+=B[i];
        }
        C.push_back(t%10);//保存个位数
        t/=10;//保存加法的进位 
    }
    if(t) C.push_back(t);//如果也有进位,那么加到最后面
    
}

int main(){
    vector<int> A,B,C;
    string a,b;
    while(cin>>a>>b){
        for( int i=a.size()-1;i>=0;--i) A.push_back(a[i]-'0');//逆序存储数组
        for( int i=b.size()-1;i>=0;--i) B.push_back(b[i]-'0');
        add(A,B,C);
        for( int i=C.size()-1;i>=0;--i) cout<<C[i];
        cout<<endl;
        A.clear();
        B.clear();
        C.clear();
    }
    
}

中间发生的错误,main函数里面加了unsigned之后段错误,不知道为啥,可能是有隐式类型转换导致的段错误!!

#include<bits/stdc++.h>
const int N=100086;
using namespace std;
void add(vector<int>& A,vector<int>& B,vector<int>& C){
    if(A.size()<B.size()){
        add(B,A,C);
        return;
    }
    unsigned int t=0;
    for(unsigned int i=0;i<A.size();++i){
        t+=A[i];
        if(i<B.size()){
            t+=B[i];
        }
        C.push_back(t%10);
        t/=10;
    }
    if(t) C.push_back(t);
    
}

int main(){
    vector<int> A,B,C;
    string a,b;
    while(cin>>a>>b){
        for(unsigned int i=a.size()-1;i>=0;--i) A.push_back(a[i]-'0');
        for(unsigned int i=b.size()-1;i>=0;--i) B.push_back(b[i]-'0');
        add(A,B,C);
        for(unsigned int i=C.size()-1;i>=0;--i) cout<<C[i];
        cout<<endl;
        A.clear();
        B.clear();
        C.clear();
    }
    
}