#ifndef MY_BIGN_H
#define MY_BIGN_H 1
#pragma GCC system_header
#include<cstring>
#include<algorithm>
#include<iostream>
using std::max;
using std::istream;
using std::ostream;
using std::string;

namespace zyf{
struct bign{
static const int maxlen=5000,limit=10000,width=4;
int len,bit[maxlen];
int& operator[](int p){ return bit[p]; }
void ClearBit(){ memset(bit,0,sizeof(bit)); }
void Delete0(){ for(;!bit[len-1] && len>1;--len); }

bign(int p=0){ *this=p; }
bign& operator=(int p){
ClearBit();
len=p?0:1; for(;p;p/=limit) bit[len++]=p%limit;
return *this;
}
bign(const char *p){ *this=p; }
bign& operator=(const char *p){
ClearBit();
len=0;
for(int i=strlen(p)-1;i>=0;i-=4){
int now=0;
for(int j=max(0,i-width+1);j<=i;++j) now=now*10+(p[j]-'0');
bit[len++]=now;
}
return *this;
}

bign& operator+=(bign b){
len=max(len,b.len)+1;
for(int i=0;i<len;++i) bit[i]+=b[i],bit[i+1]+=bit[i]/limit,bit[i]%=limit;
Delete0(); return *this;
}
bign& operator-=(bign b){
for(int i=0;i<len;++i){ bit[i]-=b[i]; if(bit[i]<0) bit[i]+=limit,--bit[i+1]; }
Delete0(); return *this;
}
bign& operator*=(bign b){
bign a=*this; ClearBit(); len=a.len+b.len;
for(int i=0;i<a.len;++i)
for(int j=0;j<b.len;++j)
bit[i+j]+=a[i]*b[j],bit[i+j+1]+=bit[i+j]/limit,bit[i+j]%=limit;
Delete0(); return *this;
}
bign& operator/=(int b){
for(int i=len-1;i>0;--i) bit[i-1]+=limit*(bit[i]%b),bit[i]/=b; bit[0]/=b;
Delete0(); return *this;
}

bool operator<(bign b) const{
if(len>b.len) return false;
if(len<b.len) return true;
for(int i=len-1;i>=0;--i)
if(bit[i]!=b[i]) return bit[i]<b[i];
return bit[0]<b[0];
}
bool operator==(bign b) const{ return !(*this<b) && !(b<*this); }
bool operator!=(bign b) const{ return !(*this==b); }
bool operator>(bign b) const{ return !(*this<b) && !(*this==b); }
bool operator<=(bign b) const{ return *this<b || *this==b; }
bool operator>=(bign b) const{ return *this>b || *this==b; }

bool odd(){ return bit[0]%2==1; }
bool even(){ return bit[0]%2==0; }
};
bign operator+(bign a,bign b){ return a+=b; }
bign operator-(bign a,bign b){ return a-=b; }
bign operator*(bign a,bign b){ return a*=b; }
bign operator/(bign a,int b){ return a/=b; }
istream& operator>>(istream &is,bign &p){
string s; is>>s; p=s.c_str();
return is;
}
ostream& operator<<(ostream &os,bign p){
os.fill('0'); os<<p.bit[p.len-1];
for(int i=p.len-2;i>=0;--i){ os.width(bign::width); os<<p.bit[i]; }
return os;
}

bign sqrt(bign x){
bign head=1,tail=x;
while(head<=tail){
bign mid=(head+tail)/2;
if(x<mid*mid) tail=mid-1; else head=mid+1;
}
return tail;
}
}
using zyf::bign;
#endif

dalao高精的更多相关文章

  1. Linux 高精確的時序(sleep, usleep,nanosleep) from:http://blog.sina.com.cn/s/blog_533ab41c0100htae.html

    Linux 高精確的時序(sleep, usleep,nanosleep) (2010-04-14 17:18:26) 转载▼ 标签: 杂谈 分类: linux 首先, 我会说不保证你在使用者模式 ( ...

  2. c++ 普通高精除高精

    //codevs3118 高精度练习之除法 //打出了高精除高精,内心有点小激动. //还记得已开始学的时候非常难打 #include<cstdio>#include<cstring ...

  3. c++普通高精加

    //作为一名蒟蒻,还请诸位不要吐槽. //第一次打c++高精加,内心有点小激动. //为codevs3116 高精度练习之加法 //程序太简单,就不打注释了. #include<cstdio&g ...

  4. BZOJ_1002_[FJOI2007]_轮状病毒_(递推+高精)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1002 )*&*(^&*^&*^**()*) 1002: [FJOI20 ...

  5. bzoj 3287: Mato的刷屏计划 高精水题 && bzoj AC150

    3287: Mato的刷屏计划 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 124  Solved: 43[Submit][Status] Desc ...

  6. codevs 3119 高精度练习之大整数开根 (各种高精+压位)

    /* codevs 3119 高精度练习之大整数开根 (各种高精+压位) 二分答案 然后高精判重 打了一个多小时..... 最后还超时了...压位就好了 测试点#1.in 结果:AC 内存使用量: 2 ...

  7. vijos P1375 大整数(高精不熟的一定要做!)

    /* 我尼玛这题不想说啥了 亏了高精写的熟..... 加减乘除max都写了 高精二分 */ #include<iostream> #include<cstdio> #inclu ...

  8. noip 2012 国王游戏(贪心+高精)

    /* 我是不会说我考试的时候想到了正解却把金币取大看成金币求和的.... 觉得只按左右手乘积排序不太对 有反例 也可能我反例放到这个题里是错的吧 按自己的理解排的序 就是各种讨论... 假设 第i个人 ...

  9. noip推荐系列:遥控车[字符串+高精+二分答案]

    [问题描述] 平平带着韵韵来到了游乐园,看到了n辆漂亮的遥控车,每辆车上都有一个唯一的名字name[i].韵韵早就迫不及待地想玩名字是s的遥控车.可是韵韵毕竟还小,她想象的名字可能是一辆车名字的前缀( ...

随机推荐

  1. springmvc跨域问题

    1.跨域问题: 按照网上所有的方法试了一遍,都没跨过去,正在无助之际,使用filter按照下面的方法解决的时候出现了转机: 添加filter: package com.thc.bpm.filter; ...

  2. BloomFilte布隆过滤器简介

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...

  3. 第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现

    第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现 一.    案例说明 本节将通过一个案例介绍怎么使用property定义快捷的属性访问.案例中使用Rectan ...

  4. 老猿学5G扫盲贴:3GPP规范文档命名规则及同系列文档阅读指南

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在学习5G规范过程中,有些内容把握不定的时候,有时 ...

  5. PyQt(Python+Qt)学习随笔:QMainWindow的tabifyDockWidget方法将QDockWidget两个停靠窗选项卡式排列

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 主窗口的tabifyDockWidget方法用于将主窗口的两个停靠窗口 ...

  6. 使用Fiddle修改请求数据

    修改请求数据 以淘宝网为例 命令行中输入bpu 及要拦截的请求地址,如bpu https://s.taobao.com/search 在搜索栏中输入"面包机" 可以看到拦截到的请求 ...

  7. 乌云wooyun网站硬盘复活

    AWD比赛防止没有网络,在移动硬盘里面准备一个乌云漏洞库. 之前也想过弄一个乌云的镜像网站,无奈学生机性能太低下了,部署到公网上服务器存储空间都不够,只能部署在本地硬盘了. 乌云镜像的开源地址:htt ...

  8. jquery.sticky 粘性滚动插件使用

    一个jQuery插件,使你能够做任何元素在您的网页上总是可见的,可以作为顶部固定导航显示插件. 官网地址:http://stickyjs.com/ github:https://github.com/ ...

  9. MySQL技术内幕InnoDB存储引擎(五)——索引及其相关算法

    索引概述 索引太多可能会降低运行性能,太少就会影响查询性能. 最开始就要在需要的地方添加索引. 常见的索引: B+树索引 全文索引 哈希索引 B+树索引 B+树 所有的叶子节点存放完整的数据,非叶子节 ...

  10. 用列表+for循环生成乘法口诀表

    1 # 结合一下列表生成, 准备设计乘法表 2 # numlist = [1,2,3,4,5] 3 # [pow(i,3) for i in numlist] 4 # ## [1, 8, 27, 64 ...