[ACW]791~794高精度

Posted sumaywlx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ACW]791~794高精度相关的知识,希望对你有一定的参考价值。

题链

tips:

  1.倒序存储

  2.进位、借位处理t

  3.去除前导零

  4.c++11新语法auto

  5.A4A3A2A1A0(自然语言与代码存储相结合)

  6.压位处理?

技术图片
//加法
#include<iostream>
#include<vector>
#include<cstdio>
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(1);
    return C;
}
int main(){
    string a,b;
    vector<int> A,B;

    cin>>a>>b;//a="123456"
    for(int i=a.size()-1; i>=0; i--) A.push_back(a[i]-0); //A=[6,5,4,3,2,1]
    for(int i=b.size()-1; i>=0; i--) B.push_back(b[i]-0);
    auto C= add(A,B);//c++11标准,for循环可以范围遍历;一个变量冒号一个list或容器。

    for(int i=C.size()-1; i>=0; i--) printf("%d",C[i]);//个位数先放进去

    return 0;
}
View Code
技术图片
//Ai-Bi-t
//保证A大于等于B
//A有多少位,C有多少位;减法要处理前导零
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;

//判断是否有A >= B
bool cmp(vector<int> &A, vector<int> &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;
}
//C=A-B;
vector<int> sub(vector<int> &A, vector<int> &B){
    vector<int> C;
    for(int i=0,t=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;//a="123456"
    for(int i=a.size()-1; i>=0; i--) A.push_back(a[i]-0); //A=[6,5,4,3,2,1]
    for(int i=b.size()-1; i>=0; i--) B.push_back(b[i]-0);

    if(cmp(A,B)){
        auto C= sub(A,B);//c++11标准,for循环可以范围遍历;一个变量冒号一个list或容器。

        for(int i=C.size()-1; i>=0; i--) printf("%d",C[i]);//个位数先放进去

    }
    else{
        auto C= sub(B,A);//c++11标准,for循环可以范围遍历;一个变量冒号一个list或容器。
        printf("-");
        for(int i=C.size()-1; i>=0; i--) printf("%d",C[i]);//个位数先放进去

    }

    return 0;
}
View Code

ps:

  1.记忆算法思路,落实到代码。

  2.自然理解讨论,写代码时转化成语言语法。

 

以上是关于[ACW]791~794高精度的主要内容,如果未能解决你的问题,请参考以下文章

AcWing 794. 高精度除法

AcWing 794.高精度除法

高精度乘除法模板(AcWing.793 794)

算法AcWing 794. 高精度除法

AcWing 791. 高精度加法

AcWing 791. 高精度加法 解题记录