【模板】压位高精度

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

任何沾染了高精度的题都是恶心的题……
看到高精度的题就烦呐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: 立即下载

相关推荐

mac安全干净卸载Anaconda3

主要原因是python命令没有映射到已经安装的python版本上,则需要添加。修改~/.bash_profile文件,将anaconda相关删除。现在想卸载Anaconda,恢复使用mac系统自带的Python。最后在mac的应用目录删除Anaconda。查看所有版本的python所在安装目录。或者不使用软连接映射,也可使用。再次查看python映射。查看python版本。建立软连接,添加映射。

buyue 5963

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

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

weixin_42638946的博客 4581

Loupe Browser实战指南:解锁10xGenomics单细胞数据的可视化奥秘

本文提供了Loupe Browser的实战指南,帮助用户无需编程即可探索和可视化10xGenomics单细胞数据。文章详细介绍了从数据导入、界面导航到细胞亚群鉴定、差异基因分析的核心操作流程,并分享了高级技巧与避坑指南,是快速上手这一强大可视化工具的必备参考。

weixin_29313423的博客 208

压位高精度

高精度,新的飞跃

Young_20220202的博客 503

把MinerU集成到Dify

本文介绍了如何将本地部署的MinerU与Dify平台进行集成。首先需要确保Dify和MinerU在Docker环境中正常运行,并通过配置虚拟网络实现互联。然后详细说明了在Dify平台安装MinerU插件的步骤,包括从插件市场搜索安装、配置连接参数等关键操作。特别强调了要等待MinerU容器完全启动(healthy状态)后再进行Dify配置,否则会出现连接错误。通过简单的URL指向和API密钥设置,用户即可实现Dify平台与本地MinerU算力网络的对接,为后续的AI应用开发提供基础支持。

lyxerlau的博客 314

聚类分析(超全超详细版)

聚类分析是一种典型的无监督学习, 用于对未知类别的样本进行划分,将它们按照一定的规则划分成若干个类族,把相似(距高相近)的样本聚在同一个类簇中, 把不相似的样本分为不同类簇,从而揭示样本之间内在的性质以及相互之间的联系规律 聚类算法在银行、零售、保险、医学、军事等诸多领域有着广泛的应用 聚类分析基础 聚类分析的概念 聚类分析是根据在数据中发现的描述对象及其关系的信息,将数据对象分组。目的是...

Gfqwy2021 22万+

高精度计算(三)压位

压位高精

sSay 1万+

PD3.0详解 第十一章 策略层 电源协商(三)(sink端)

前面大师匈介绍了Source端的内容,今天再看一下sink端的内容。大师匈还是想把标准文件的状态机拿出来说一下。大师匈把一张图分成俩部分,大家凑合看一下,一张图实在看不清内容。 Sink 端电源协商状态机。基于sink端哦!!! 上图先!!! 上面俩张图就是整个SINK端口的状态机了。。。介绍一下这个流程: 1、收到hardreset或者刚上电的进入PE_SNK_Startup开始状态。 2、在PE_SNK_Startup阶段后进入PE_SNK_Discovery,并等待Vbus的到来。 3、当Vbus

大师匈的博客 4132

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

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

仟墨(郑龙浩)的博客 1241

Vue3 - 解决报错 Uncaught (in promise) DOMException: Failed to execute ‘insertBefore‘ on ‘Node‘: The node

vue3,报错,vue3报错,Uncaught(inpromise)DOMException:Failedtoexecute'insertBefore'on'Node':Thenodebeforewhichthenewnodeistobeinsertedisnotachildofthisnode,如何解决这个错误,动态渲染,v-if,v-show,insertBefore,详细解决方法,vue3未能在“Node”上执行“insertBefore”:要插入

🏆 前端领域优质创作者 1万+

双目深度相机--10.双目视觉的主要步骤讲解分析

双目视觉技术通过模拟人眼原理,利用两个相机从不同视角采集图像,实现三维坐标计算。其核心流程包括:1)系统标定,消除相机畸变并建立坐标映射关系;2)图像同步采集与预处理;3)立体匹配,寻找左右图像对应点;4)基于视差图的深度计算;5)三维重建生成点云或网格模型;6)结果应用如目标测距、三维建模等。关键技术难点在于精确标定和准确匹配,这两步直接影响最终深度计算的精度。该技术广泛应用于自动驾驶、工业检测、VR等领域,实现了从二维图像到三维空间的精准转换。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 625

高精度算法-压位

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

LiuKairui的博客 6920

C#串口通信革命:RJCP.DLL.SerialPortStream实战全解析

本文介绍了如何通过RJCP.DLL.SerialPortStream库实现高性能串口通信解决方案。相比.NET自带的SerialPort类,该库提供了完全的异步非阻塞IO、动态缓冲区控制和多线程事件驱动等优势,特别适合工业自动化和物联网场景。文章详细讲解了环境搭建、核心功能对比,并通过代码示例展示了端口配置、异步通信管道搭建等关键技术。最后以Modbus RTU协议为例,演示了高级协议封装方法,为开发者提供了完整的工业级串口通信实现方案。

墨夶的博客 1877

高精度模板(压位版)

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

qq_37816449的博客 666

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

压位高精度模板

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

哇哈哈的专栏 2030

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

#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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

逝压位的高精度模板

总的来说只是一时兴起,没想到写了这么久()。不过总算是赶完了,全部数压的都是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、付费专栏及课程。

余额充值