c++高精度模板

高精加:

思路:用整型数组相加、输出

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a[10090]={0},b[10090]={0};
    string s1,s2;
    cin>>s1>>s2;
    for(int i=s1.size()-1;i>=0;i--){
        a[s1.size()-i]=s1[i]-'0';
    }
    for(int i=s2.size()-1;i>=0;i--){
        b[s2.size()-i]=s2[i]-'0';
    }
    int i=1;
    for(i=1;i<=max(s1.size(),s2.size());i++){
        a[i]+=b[i];
        if(a[i]>=10){
            a[i+1]+=a[i]/10;
            a[i]%=10;
        }
    }
    for(int j=i;j>=1;j--){
        if(j==i&&a[j]==0){
            continue;
        }
        cout<<a[j];
    }
}

高精减:

思路:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a[10090]={0},b[10090]={0};
    string s1,s2;
    cin>>s1>>s2;
    if(s1.size()<s2.size()){
        cout<<"-";
        string t;
        t=s1;
        s1=s2;
        s2=t;
    }else if(s1.size()==s2.size()){
        if(s1<s2){
            cout<<"-";
            string t;
            t=s1;
            s1=s2;
            s2=t;
        }
    }
    for(int i=s1.size()-1;i>=0;i--){
        a[s1.size()-i]=s1[i]-'0';
    }
    for(int i=s2.size()-1;i>=0;i--){
        b[s2.size()-i]=s2[i]-'0';
    }
    int i=1;
    for(i=1;i<=max(s1.size(),s2.size());i++){
        a[i]-=b[i];
        if(a[i]<0){  
            a[i+1]-=1;
            a[i]+=10;
        }
    }
    bool f=1;
    for(int j=i-1;j>=1;j--){
        if(a[j]==0&&f){
            continue;
        }else{
            f=0;
            cout<<a[j];
        }
    }
    if(f){
    	cout<<0;
	}
}

在前面加上了结果为负的判断,如a>b,则a-b=-(b-a),所以先输出负号,然后a、b交换,运算同加法。

高精乘:

思路:将b的每一位与a相乘的结果求出,然后利用高精加算出结果。

温馨提示:博主码力不足,又懒得改,所以高精乘目前只适配

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
struct type{
	int c[1000]={0};
}sum[1000];
int main(){
    int a[500]={0},b[500]={0};
    string s1,s2;
    cin>>s1>>s2;
    for(int i=s1.size()-1;i>=0;i--){
        a[s1.size()-i]=s1[i]-'0';
    }
	for(int i=s2.size()-1;i>=0;i--){
        b[s2.size()-i]=s2[i]-'0';
    }
    int i=1;
    for(i=1;i<=s1.size();i++){
    	for(int j=1;j<=s2.size();j++){
    		sum[i].c[i+j-1]=a[i]*b[j];
		}
	} 
	for(i=1;i<=s1.size();i++){
		for(int j=1;j<=s2.size()+s1.size();j++){
			sum[i].c[j+1]+=sum[i].c[j]/10;
			sum[i].c[j]%=10;
		}
	}
	for(i=1;i<=s1.size();i++){
        for(int j=1;j<=s1.size()+s2.size();j++){
            sum[s1.size()+1].c[j]+=sum[i].c[j];
            if(sum[s1.size()+1].c[j]>=10){
                sum[s1.size()+1].c[j+1]+=sum[s1.size()+1].c[j]/10;
                sum[s1.size()+1].c[j]%=10;
            }
        }
    }
    bool f=1;
    for(int j=s1.size()+s2.size();j>=1;j--){
        if(f&&sum[s1.size()+1].c[j]==0){
            continue;
        }
        f=0;
        cout<<sum[s1.size()+1].c[j];
    } 
}

如有不足,请在评论区分享您的思路!

相关推荐
搬砖魁首10 小时前
基础能力系列 - 多线程2 - 条件变量
c++·rust·条件变量·原子类型·线程同步互斥
youngerwang10 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
chase_my_dream10 小时前
C++ + SLAM 高频面试问题整理
开发语言·c++·面试
牛油果子哥q11 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++
KaMeidebaby11 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
dingzd9511 小时前
跨境社媒运营越到后面 越比拼账号的表达稳定性
大数据·人工智能·矩阵·内容营销
手写码匠11 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
无限码力12 小时前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试
lqqjuly12 小时前
MLA — 多头潜在注意力深度解析
深度学习·神经网络·算法
吴可可12312 小时前
SolidWorks草图转三维DWG技巧
算法