高精度运算

高精度加法

注意:

  • 数据过于大时,可将数据按字符串(string)输入,然后减去‘0’可转换为数字类型;
  • 和的每一位来源于:两个加数的每一位和上一位进上来的1;
#include
using namespace std;
string a,b;
vector<int>l,r,ans;
int main(){
     
    cin>>a>>b;
    for(int i=a.size()-1;i>=0;i--) l.push_back(a[i]-'0');
    for(int i=b.size()-1;i>=0;i--) r.push_back(b[i]-'0');
    int i=0,t=0;
    while(i<max(a.size(),b.size()))
    {
     
        if(i<a.size()) t+=l[i];
        if(i<b.size()) t+=r[i];
        i++;
        ans.push_back(t%10);
        t=t/10;
    }
    if(t) ans.push_back(1);
    for(int i=ans.size()-1;i>=0;i--) cout<<ans[i];
    return 0;
}

高精度减法

#include
using namespace std;
string a,b;
vector<int>l,r,c;
bool cmp()
{
     
    return a.size()==b.size()?a>=b:a.size()>b.size();
}
int main(){
     
    cin>>a>>b;
    bool flag=false;
    if(!cmp()) flag=true,swap(a,b);
    for(int i=a.size()-1;i>=0;i--) l.push_back(a[i]-'0');
    for(int i=b.size()-1;i>=0;i--) r.push_back(b[i]-'0');
    int i=0,t=0;
    while(i<a.size())
    {
     
        t=l[i]-t;
        if(i<b.size())t=t-r[i];
        c.push_back((t+10)%10);
        if(t<0) t=1;
        else t=0;
        i++;
    }
    while(c.back()==0&&c.size()>1) c.pop_back();
    if(flag==true) cout<<"-";
        for(int i=c.size()-1;i>=0;i--)
            cout<<c[i];
    return 0;
}

高精度乘法

#include
using namespace std;
vector<int>l,c;
string a;
int b;
int main(){
     
    cin>>a>>b;
    for(int i=a.size()-1;i>=0;i--) l.push_back(a[i]-'0');
     int t=0;
    for(int i=0;i<l.size();i++)
    {
     
        t=l[i]*b+t;
        c.push_back(t%10);
        t=t/10;
    }
    if(t) c.push_back(t);
    while(c.back()==0&c.size()>1) c.pop_back();
    for(int i=c.size()-1;i>=0;i--) cout<<c[i];
    return 0;
}

高精度除法

注意:最后输出时要去掉结果前面没用的0,但当结果为0时,要输出0;可设两个bool变量flag和flag1,flag用来标志该位是否为0,flag1用来判断是否结果为0;

#include
using namespace std;
string a;
int b;
vector<int>l,c;
int main(){
     
    cin>>a>>b;
    for(int i=0;i<a.size();i++)l.push_back(a[i]-'0');
    int t=0;
    for(int i=0;i<l.size();i++){
     
        t=t*10+l[i];
        c.push_back(t/b);
        t=t%b;
    }
    bool flag=true,flag1=true;
    for(int i=0;i<c.size();i++)if(c[i]==0&&flag);else flag=false,flag1=false,cout<<c[i];
    if(flag) cout<<0;
    cout<<endl<<t<<endl;
    return 0;
}

你可能感兴趣的:(算法)