【模板】压位高精度

高精度模板 高精度模板,整合了多篇文档,有高精度加法,高精度减法,高精度乘法,高精度除法,高精度取模法等模板... 立即下载

任何沾染了高精度的题都是恶心的题……
看到高精度的题就烦呐TAT
干脆存一个高精度的模板好了

#include <cstdio>  
#include <cstring>  
#include <algorithm>  


using namespace std;  


const int power = 1;      //每次运算的位数为10的power次方,在这里定义为了方便程序实现  
const int base = 10;      //10的power次方。  


//要压位的时候,只需改power 和 base即可,如压万位高精,那么power = 4, base = 10000  


const int MAXL = 1001;    //数组的长度。  


char a[MAXL], b[MAXL];  
struct num  
{  
    int a[MAXL];  
    num() { memset(a, 0, sizeof(a)); }                      //初始化  
    num(char *s)                                            //将一个字符串初始化为高精度数  
    {  
        memset(a, 0, sizeof(a));  
        int len = strlen(s);  
        a[0] = (len+power-1) / power;                       //数的长度  
        for (int i=0, t=0, w; i < len ;w *= 10, ++i)          
        {  
            if (i % power == 0) { w = 1, ++t; }  
            a[t] += w * (s[i]-'0');  
        }  
        //初始化数组,这里自己模拟一下,应该很容易懂的~  
    }  
    void add(int k) { if (k || a[0]) a[ ++a[0] ] = k; }     //在末尾添加一个数,除法的时候要用到  
    void re() { reverse(a+1, a+a[0]+1); }                   //把数反过来,除法的时候要用到  
    void print()                                            //打印此高精度数  
    {  
        printf("%d", a[ a[0] ]);        
        //先打印最高位,为了压位 或者 该高精度数为0 考虑  
        for (int i = a[0]-1;i > 0;--i)  
        printf("%0*d", power, a[i]);    
        //这里"%0*d", power的意思是,必须输出power位,不够则前面用0补足  
        printf("\n");  
    }  
} p,q,ans;  


bool operator < (const num &p, const num &q)              //判断小于关系,除法的时候有用  
{  
    if (p.a[0] < q.a[0]) return true;  
    if (p.a[0] > q.a[0]) return false;  
    for (int i = p.a[0];i > 0;--i)  
    {  
        if (p.a[i] != q.a[i]) return p.a[i] < q.a[i];  
    }  
    return false;  
}  


num operator + (const num &p, const num &q)               //加法,不用多说了吧,模拟一遍,很容易懂  
{  
    num c;  
    c.a[0] = max(p.a[0], q.a[0]);  
    for (int i = 1;i <= c.a[0];++i)  
    {  
        c.a[i] += p.a[i] + q.a[i];  
        c.a[i+1] += c.a[i] / base;  
        c.a[i] %= base;  
    }  
    if (c.a[ c.a[0]+1 ]) ++c.a[0];  
    return c;  
}  


num operator - (const num &p, const num &q)               //减法,也不用多说,模拟一遍,很容易懂  
{  
    num c = p;  
    for (int i = 1;i <= c.a[0];++i)  
    {  
        c.a[i] -= q.a[i];  
        if (c.a[i] < 0) { c.a[i] += base; --c.a[i+1]; }  
    }  
    while (c.a[0] > 0 && !c.a[ c.a[0] ]) --c.a[0];            
    //我的习惯是如果该数为0,那么他的长度也是0,方便比较大小和在末尾添加数时的判断。  
    return c;  
}  


num operator * (const num &p, const num &q)                   
//乘法,还是模拟一遍。。其实高精度就是模拟人工四则运算!  
{  
    num c;  
    c.a[0] = p.a[0]+q.a[0]-1;  
    for (int i = 1;i <= p.a[0];++i)  
    for (int j = 1;j <= q.a[0];++j)  
    {  
        c.a[i+j-1] += p.a[i]*q.a[j];  
        c.a[i+j] += c.a[i+j-1] / base;  
        c.a[i+j-1] %= base;  
    }  
    if (c.a[ c.a[0]+1 ]) ++c.a[0];  
    return c;  
}  


num operator / (const num &p, const num &q)               //除法,这里我稍微讲解一下  
{  
    num x, y;  
    for (int i = p.a[0];i >= 1;--i)                       //从最高位开始取数  
    {  
        y.add(p.a[i]);             //把数添到末尾(最低位),这时候是高位在前,低位在后  
        y.re();                    //把数反过来,变为统一的存储方式:低位在前,高位在后  
        while ( !(y < q) )         //大于等于除数的时候,如果小于的话,其实答案上的该位就是初始的“0”  
            y = y - q, ++x.a[i];   //看能减几个除数,减几次,答案上该位就加几次。  
        y.re();                    //将数反过来,为下一次添数做准备  
    }  
    x.a[0] = p.a[0];  
    while (x.a[0] > 0 && !x.a[x.a[0]]) --x.a[0];  
    return x;  
}  


int main()  
{  
    scanf("%s", a);  
    scanf("%s", b);  
    reverse(a, a+strlen(a));  
    reverse(b, b+strlen(b));  

    p = num(a), q = num(b);  

    ans = p + q;  
    ans.print();  

    ans = p - q;  
    ans.print();  

    ans = p * q;  
    ans.print();  

    ans = p / q;  
    ans.print();  
}  

转自http://blog.youkuaiyun.com/devillaw_zhc/article/details/7776578

高精度类(压位)C++实现 高精度压位 #include #include #include using namespace std; const int maxleng=500; class BigInt { private: int leng; int num[maxleng]; public: 立即下载

相关推荐

英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM

1. 概述 随着汽车上通信系统越来越复杂,云端远程通信的场景越来越多,信息安全变得越来越重要,在通信领域常用的AES、SHA、RSA等加密算法被越来越多地应用到汽车上。但通常这类加解密算法都需要大量的数学运算,需要消耗很多CPU时间和资源,汽车上的ECU又有比较高的实时性要求,为了节省主CPU的资源,HSM应运而生。 HSM(Hardware Security Module),是MCU上专门用于实现加解密算法的一个外设,它一般会有一个独立的CPU,专门用来进行加解密运算,还有一些针对特定算法的硬件加速器(如

weixin_42967006的博客 4万+

【算法专题】高精度之压位

高精度之压位 当数据过大时,此时long long存储不下,因此需要使用vector或者数组存储,然后计算。 一般vector或者数组中每个数据都是一个int,如果每个位置只是存储0~9一位数字的话,比较浪费空间,并且计算也会变慢。因此可以让每个位置存储连续的多位数字,这被称作压位。 这里以压4位为例,也就是说:vector或者数组中每个位置存储四个连续的数字。 1. 基本高精度运算 关于基本高精度计算可以参考:高精度运算 2. 高精度压位运算 压位和不压位的高精度计算存在三点不同点(以下提到的压

weixin_42638946的博客 4581

KiCad 7.0 + 嘉立创打样:从原理图到实物,打造你的双LLCC68 LoRa串口透传板

本文详细介绍了使用KiCad 7.0设计双LLCC68 LoRa串口透传板的完整流程,从原理图设计到嘉立创打样。重点解析了AVR+LLCC68组合的优势、双模块布局的电磁兼容设计、SPI接口配置及射频走线技巧,并提供了实测数据和常见问题解决方案,帮助开发者高效实现物联网设备的低功耗远距离通信。

weixin_28693447的博客 261

压位高精度

高精度,新的飞跃

Young_20220202的博客 503

从零开始理解二极管限幅:5种典型电路设计及实际应用场景解析

本文系统解析了二极管限幅电路的五大经典拓扑,包括串联与并联型上下限幅及双向限幅。通过剖析其核心原理与二极管的单向导电性、正向压降特性,结合ADC输入保护、电源管理、音频处理等实际应用场景,提供了从器件选型到设计陷阱规避的完整实战指南,帮助工程师为信号构建可靠的“安全笼”。

2y3u4i5o6p的博客 1034

YOLOv8高级应用实战:多目标跟踪+实例分割+小样本检测(工业/安防场景落地指南)

安防监控中,需要跟踪多个行人的运动轨迹,而不只是框出“这是行人”;工业质检时,要精确分割出零件的缺陷区域(像素级),而不是只给一个粗略的矩形框;罕见场景下(如特殊故障检测、稀有动物识别),只能收集到几十张样本,普通训练方法精度惨不忍睹。我在落地工业安防和质检项目时,把YOLOv8的高级功能摸了个遍,踩过“多目标跟踪遮挡丢帧”“实例分割边缘模糊”“小样本检测过拟合”等一系列坑,最终总结出这套可直接复用的实战方案。多目标跟踪(ByteTrack)、实例分割、小样本检测。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 750

高精度计算(三)压位

压位高精

sSay 1万+

MATLAB基础应用精讲-【数模应用】PPO算法(附python代码实现)(二)

表示为状态转移概率和动作选择概率的乘积,因为状态和动作决定轨迹。

qq_36130719的博客 413

进阶 - 【压位】高精度算法

算法学习笔记,进阶版的【高精度算法】--> 【压位】高精度算法

仟墨(郑龙浩)的博客 1241

华为海思:大小海思的双轮驱动战略分析

大海思的定位清晰明确,即专注于为华为内部提供高性能、高集成度的芯片解决方案,以支持华为终端、服务器等业务的快速发展。小海思的产品线广泛,涵盖了广域物联、短距物联、手机穿戴、显示交互、智慧视觉、智慧媒体、MCU、模拟以及光模块等多个领域。通过提供多样化的芯片解决方案,小海思旨在满足外部客户的不同需求,拓展华为海思在芯片市场的份额和影响力。大海思的产品布局主要围绕华为的内部需求展开。在智能手机应用处理器方面,大海思的麒麟系列芯片已经成为华为手机的标志性产品,以其出色的性能和能效比赢得了市场的广泛认可。

dream it possible 2924

【软考】系统集成项目管理工程师(一)信息化知识

软考中级——系统集成项目管理工程师备考干货第一章:信息化知识。

商务合作 | 共同学习 | 携手共进 9万+

高精度算法-压位

我们之前做过大整数类的运算的题目 大整数乘法 大整数加法 这个方法看似是无敌的,,, 但是那么如果是一个10000^10000位的数据呢? 数组根本开不到这么大的。。。 有这样的题目吗? 传送门 这时候我们就需要压位了。。。 还记得我们存储数字的方式? 举个栗子:1234 + 1234这是之前的存储方式 实际上我们一个数组空间(int)是可以储存 2147483647 以...

LiuKairui的博客 6920

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

高精度模板(压位版)

(这次没偷懒,加减乘除模开方都有。。) 一直不想写压位,直到。。。。。。。。。。 遇到了一道会卡不压位高精度的题,心痛到无法呼吸 而且是在考试的时候。。。。。。。。。。 于是临时推,发现压位的输入输出真的是恶心 但是压位的优点也是明显的:速度快,内存低 缺点在于,如果让你保留一定位数的话,不到万不得已别写这玩意儿 以及在高精度除以整型时,如果整型过大,是会炸掉的。 关于

qq_37816449的博客 666

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

压位高精度模板

原先是整型数组每个元素存1个数字,压位高精是每位存8个数字,这样可以加速8呗,空间也减小了。可谓是对整形数组的充分利用。 #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long long

哇哈哈的专栏 2030

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

高精度压位(亿进制)模板

#include<bits/stdc++.h> using namespace std; typedef long long LL; const LL inf=0x3f3f3f3f; class HighPrecision{//高精度压位模板 public: vector<LL>p; bool operator<(HighPrecision b){//重载...

Long_hen的博客 537

逝压位的高精度模板

总的来说只是一时兴起,没想到写了这么久()。不过总算是赶完了,全部数压的都是8位,long long,支持负数,高精度整除,取余,以及除了位运算的操作符都有。可惜的一点是没有用vector,数组大小得自己调,但是压的位数也可以调。代码整体还有许多瑕疵,但我不会,也没精力调,希望大家可以多提一点建议。代码就放在这里(也许以后可以讲一下压位高精?长就对了,高精度怎么可能短。

mornstar_的博客 270

高精度乘高精度(模板、压位)

ADV-353 高精度乘法 蓝桥杯算法提高 http://lx.lanqiao.cn/problemset.page?code=ADV-&userid=301004 code #include <cstdio> #include <cstring> using namespace std; const int N = 10005; char str_a[N], str_b[N]; int a[N], b[N], c[N << 1]; int main() {

NaNa 212

高精度模板【重载运算符+压位】

昨天做一道DP的题(矩阵取数游戏),本来是很简单的,但是要用高精度,又不想用__int128水过去(谁让NOIP不让),于是自己打了一个小时,最后成功挂了。。。 于是本蒟蒻痛定思痛,感觉高精度还是重载运算符好用啊,就花了几个小时打了一个自以为比较好记好用高精度模板: 注意暂不支持负数,如果发现有bug欢迎指出。 /*采用重载运算符,压B位 支持高精数赋值与输出、高精加(减)高精、高...

weixin_30788239的博客 301

【原创】高精度(压位储存)模板

无聊写了个高精度模板玩玩...... (以前有些地方写错了TAT) 1 /* 2 唐代李白 3 《江夏别宋之悌》 4 楚水清若空,遥将碧海通。人分千里外,兴在一杯中。 5 谷鸟吟晴日,江猿啸晚风。平生不下泪,于此泣无穷. 6 */ 7 #include <iostream> 8 #include <cstdio&...

Gregory99174的博客 166

压8位高精度模板

#define LL long long int struct bignum { LL num[MAXN] ; void init() { memset(num,0,sizeof num); } bool operator < (const bignum &a)const { if(num[0]!=a.num[0])ret

蒟蒻的奋斗史 829

压位的高精度大数模板

#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<algorithm> #include<cstring> #include<string> #include<vector&...

weixin_30466039的博客 199

高精度压位模板

#include #include #include #include #include #include #define inf 1000000000] #define p 9 using namespace std; void _scanf(int &x){ char ch=getchar(); bool f=0; x=0; while(!isdigit(ch)) { if(ch==

eliforsharon的博客 466

{模板}高精度压位

乘:procedure c1(x:longint); var i,j,k:longint; y:int64; begin y:=0; for i:=1 to ans[0] do begin ans[i]:=ans[i]*x+y; y:=ans[i] div mo; ans[i]:=ans[i] m

GH的博客 846

压位(4位)高精度模板

【代码】压位(4位)高精度模板。

ericjian2011的博客 525
上一篇: 【Codeforces2015ICL,Finals,Div. 1#J】Ceizenpok's formula(扩展Lucas定理+中国剩余定理)
下一篇: 【洛谷1291】百事世界杯之旅
sdfzchy
博客等级 码龄10年 27粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值