标签:size pre idt max 超过 base 就是 时间 大数
在编写程序的时候,常常需要对一些大数据进行处理。然而我们知道,在C/C++中能存储的最大整数为\(2^64-1\)。当要处理的大数据超过这个范围时,就要用到所谓的高精度算法了,原理其实就是对竖式计算的模拟(特别的,除法需要试商)。
实际编写时,我们会发现一位一位地运算很费时间,因此考虑如何提高效率,在这里需要用到\(bitset\)中用到的压位思想,即4位或8位地存储、运算。最常用的是压4位,这样乘法不会溢出。但这样的话,作除法时一位一位试商就太慢了,因此需要二分试商。
#include <algorithm>
#include <cstring>
#include <cstdio>
const int MAXL = 100;
struct bign {
static const int BASE = 10000;
static const int WIDTH = 4;
int len, v[MAXL];
bign()
{
len = 0;
memset(v, 0, sizeof(v));
}
bign operator = (unsigned long long n)
{
while (n > 0) {
v[++len] = n % BASE;
n /= BASE;
}
return *this;
}
bign operator = (char *s)
{
int tmp = 0, x = 1;
for (int i = strlen(s) - 1; i >= 0; i--) {
tmp += x * (s[i] - 48);
x *= 10;
if (x == BASE) {
v[++len] = tmp;
tmp = 0;
x = 1;
}
}
if (tmp) {
v[++len] = tmp;
}
return *this;
}
inline void read()
{
char s[MAXL << 2];
scanf("%s", s);
*this = s;
return;
}
inline void write()
{
printf("%d\n", v[len]);
for (int i = len; i >= 1; i--)
printf("%04d", v[i]);
return;
}
};
标签:size pre idt max 超过 base 就是 时间 大数
原文地址:https://www.cnblogs.com/skydreamer/p/9430748.html