高精度——压位的思想及应用

本文介绍了高精度计算的概念,当常规整数类型无法表示大数时,采用高精度算法。内容涵盖如何使用压位思想提升加减运算效率,通过将十进制数的每4位组合,保持运算正确性同时减少计算时间。对于除法,利用单调性引入二分试商法,进一步优化时间复杂度。
摘要由CSDN通过智能技术生成

这里我们简单介绍一下高精度的计算。
我们都知道在Cpp/C/Pas等语言中,整数最大能储存\(2^{64} -1\),超过这个范围就表示不了了(不包括个别支持int128的编译器)。这个时候,我们如果希望把这些整数存储下来,就需要用到高精度的算法和思想。高精度就是像小学学过的竖式运算一样的(除法除外)。然后就直接模拟即可。除法一位一位地试商即可。
接下来我们发现就是一位一位地加减很慢,我们考虑如何把它加快速度(减小常数)。如果你有学习过关于bitset的相关知识,那你肯定对压位的方法不陌生。我们把十进制位中的每4~8位并在一起(笔者一般压4位,因为乘法时不会超过int的范围),然后照样加减,最后并不影响答案,但是要注意输出。对于除法,我们此时发现枚举\(10^4\)到\(10^8\)太慢了,注意到单调性,于是我们考虑二分试商,这样就也可以在\(log_2 BASE\)的时间之内求出来了。
注意初始化、赋值和输出。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
typedef int ll;

struct bign//big number
{
//init
    static const int BASE=(int)1e4,POW=4;
    static const int MAXLEN=20010;
    ll num[MAXLEN];//num[0]=length of the big number
    bign(int tp=0)
   
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值