高精度
本文最后更新于 129 天前,其中的信息可能已经有所发展或是发生改变。

高精度加法

#include<bits/stdc++.h>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B){
 vector<int>C;
 int t=0;
 for(int i=0;i<A.size()||i<B.size();i++){
 if(i<A.size())t+=A[i];
 if(i<B.size())t+=B[i];
 C.push_back(t%10);
 t/=10;
 }
 if(t)C.push_back(t);
 return C;
}
int main(){
 string a,b;
 cin>>a>>b;
 vector<int>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');
 auto c=add(A,B);
 for(int i=c.size()-1;i>=0;i--)cout<<c[i];
 return 0;
}

高精度减法

//python
a = input()
b = input()
print(a-b)
//c++
#include <iostream>
#include <vector>
using namespace std;

bool cmp(vector<int>& A,vector<int>& B){//判断A,B大小
    if(A.size()!=B.size()) return A.size()>B.size();
    
    for(int i=A.size()-1;i>=0;i--){
        if(A[i]!=B[i])return A[i]>B[i];
    }
    return true;
}

vector<int> sub(vector<int>& A,vector<int>& B){//这里保证A大于等于B
    int t=0;
    vector<int>c;
    for(int i=0;i<A.size();i++){
        t=A[i]-t;
        if(i<B.size())t-=B[i];
        c.push_back((t+10)%10);
        if(t<0)t=1;
        else t=0;
    }
    while(c.size()>1&&c.back()==0)c.pop_back();

    return c;
}

int main(){
    string a,b;
    vector<int>A,B;
    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');
    
    if(cmp(A,B)){
        auto C = sub(A,B);
        for(int i=C.size()-1;i>=0;i--)cout<<C[i];
        
    }else{
        auto C = sub(B,A);
        cout<<"-";
        for(int i=C.size()-1;i>=0;i--)cout<<C[i];
    }
    
    return 0;
}

高精度乘法

#include<bits/stdc++.h>
using namespace std;

vector<int> mul(vector<int>& A, vector<int>& B){//先计算每位相乘的结果再处理进位
    vector<int> c(A.size()+B.size()+10,0);
    for(int i=0;i<A.size();i++){
        for(int j=0;j<B.size();j++){
            c[i+j]+=A[i]*B[j];
        }
    }
    int t=0;
    for(int i=0;i<c.size();i++){
        t+=c[i];
        c[i]=t%10;
        t/=10;
    }
    return c;
}
int main(){

    string a,b;
    cin>>a>>b;
    vector<int>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');
    auto c = mul(A,B);
    while(c.size()>1&&c.back()==0)c.pop_back();
    for(int i=c.size()-1;i>=0;i--){
        cout<<c[i];
    }
    return 0;
}

高精度除法

#include<bits/stdc++.h>
using namespace std;
vector<int> div(vector<int>& A,int& B,int &t){//从高位到低位一个个除然后反转去掉前面的0
    vector<int> c;
    for(int i=0;i<A.size();i++){
        t=t*10+A[i];
        c.push_back(t/B);
        t%=B;
    }
    reverse(c.begin(),c.end());
    while(c.size()>1&&c.back()==0)c.pop_back();
    return c;
}
int main(){
    string a;
    int B;
    cin>>a>>B;
    vector<int>A;
    for(int i=0;i<a.size();i++)A.push_back(a[i]-'0');
    int t=0;
    auto c = div(A,B,t);
    for(int i=c.size()-1;i>=0;i--)cout<<c[i];
    cout<<endl<<t;
    return 0;
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇