高精度算法解析和高精度赛场用模板(附C++代码实现)

1.高精度算法介绍

    高精度算法,又称数值处理算法。意在通过数组模拟较大整数的存储和使用。本篇文章就会给大家介绍赛场上使用的精简版高精度算法模版。

2.高精度结构体前置函数

2.1.定义高精度结构体

    首先定义一个高精度结构体。用数组a储存这个数,用变量len储存这个数的长度。MAXN代表数组a的最大长度。

#define MAXN 1010
struct bigint {
   
    int len, a[MAXN];
};

2.2.重载[ ]

    为了方便访问数组a中的元素,我们需要重载[ ]。

int& operator[](int i) {
   //用x[i]代替x.a[i]
	return a[i];
}

2.2.构造函数

    我们有时会需要用低精度整数来初始化高精度整数。这个时候就需要构造函数了。注意:为了方便实用,数组a倒序存储这个数字,即a[1]代表这个数的最后一位,以此类推。

bigint(int x = 0){
   //默认这个数是0
	memset(a, 0, sizeof(a));//初始化数组a
	if (x == 0){
   //如果x是0会直接跳过底下的循环,导致len被初始化为0,所以要特判
		len = 1;
		return;//直接返回
	}
	for (len = 1; x; len++)//只要x没被取完就一直去并增加这个数的长度
		a[len] = x % 10, x /= 10;//倒序存储x
	len--;//最后len总会多1
}

2.3.输入输出

    我们用一个字符串模拟输入。然后倒序存储。输出就直接倒序输出。

void in_data() {
   //输入高精度整数
	string s; cin >> s;//暂时存储到字符串里面
	memset(a, 0, sizeof(a)); len = 0;//清空数组并初始化这个大整数 
	for (int i = s.length() - 1; i >= 0; i--, len++)//字符串转整数
		a[s.lengt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝胖子教编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值