码迷,mamicode.com
首页 > 编程语言 > 详细

高精度算法——Step、压位及其应用

时间:2018-08-09 13:48:14      阅读:140      评论:0      收藏:0      [点我收藏+]

标签: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;
        }
};

高精度算法——Step、压位及其应用

标签:size   pre   idt   max   超过   base   就是   时间   大数   

原文地址:https://www.cnblogs.com/skydreamer/p/9430748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!