依据紫书第5章,我用新的方法实现一个高精度类。模板通过了自己用python进行的对拍,还有UVa的5道高精度题。由于类名不同,闲麻烦的可以加一句“typedef BigInteger bign”,就能用旧版高精度博文里的main函数代码直接AC。不过UVa748的代码要另写。
从UVa返回的时间来看,新版的高精度效率并没有慢多少,然而程序强健性高多了。
#include <algorithm> // max
#include <cassert> // assert
#include <cstdio> // printf,sprintf
#include <cstring> // strlen
#include <iostream> // cin,cout
#include <string> // string类
#include <vector> // vector类
using namespace std;
struct BigInteger {
typedef unsigned long long LL;
static const int BASE = 100000000;
static const int WIDTH = 8;
vector<int> s;
BigInteger& clean(){while(!s.back()&&s.size()>1)s.pop_back(); return *this;}
BigInteger(LL num = 0) {*this = num;}