博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本高精度模板
阅读量:5294 次
发布时间:2019-06-14

本文共 2267 字,大约阅读时间需要 7 分钟。

//基础高精度 #include 
#include
#include
#include
#include
#include
#include
#include
using namespace std;struct Bign{ vector
val; Bign() { val.clear(); val.resize(1,0); return ; } Bign(const char* str) { int _n=strlen(str),data=0,base=1; for(int i=_n-1; i>=0; --i) { data=data+(str[i]-48)*base; if((_n-i)%4==0) { val.push_back(data),data=0,base=1; continue; } base*=10; } val.push_back(data); clear(); return ; } void clear() { while(val.size()>1 && val.back()==0)val.pop_back(); return ; } void resize(const int x,const int y) { val.resize(x,y); } unsigned int size()const { return val.size(); } Bign(const int temp) { char str[20]; sprintf(str,"%d",temp); Bign C(str); *this=C; } void operator=(const int temp) { Bign C(temp); *this=C; return ; } void operator=(const char* str) { Bign C(str); *this=C; return ; } int& operator[](const int pos) { return val[pos]; } Bign operator+(Bign B) { Bign A=*this,C; C.resize(max(A.size(),B.size())+1,0); for(int i=0; i<(int)C.size(); ++i) { if(i<(int)A.size())C[i]+=A[i]; if(i<(int)B.size())C[i]+=B[i]; } for(int i=0; i<(int)C.size(); ++i) { C[i+1]+=C[i]/10000; C[i]%=10000; } C.clear(); return C; } Bign operator+(const int temp) { return *this+Bign(temp); } Bign operator-(Bign B) { Bign A=*this,C; if(A
=0; --i) { R=R*10000; R[0]=A[i]; while(R>=B) { R=R-B; C[i]++; } } C.clear(); return C; } Bign operator/(const int temp) { return *this/Bign(temp); } Bign operator%(Bign B) { Bign A=*this; return A-A/B*B; } Bign operator%(const int temp) { return *this%Bign(temp); } bool operator<(Bign B)const { if(val.size()!=B.size())return val.size()
=0; --i) if(val[i]!=B[i])return val[i]
(Bign B)const { return B<*this; } bool operator==(Bign B)const { return !(*this
<*this); } bool operator!=(Bign B)const { return !(*this==B); } bool operator<=(Bign B)const { return !(*this>B); } bool operator>=(Bign B)const { return !(*this
=0; --i) { char s[11]; sprintf(s,"%04d",val[i]); strcat(str,s); } return ; }};char str1[11000],str2[1100],Ans[1100000];int main(){ Bign A,B,C; scanf("%s%s",str1,str2); A=str1; B=str2; C=A*B; C.c_str(Ans); printf("%s\n",Ans); return 0;}

 

转载于:https://www.cnblogs.com/Gster/p/4984543.html

你可能感兴趣的文章
虚拟DOM
查看>>
uva 11468 Substring
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
BootStrap2学习日记2--将固定布局换成响应式布局
查看>>
关于View控件中的Context选择
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
数据库的高级查询
查看>>
[YTU]_2443 ( C++习题 复数类--重载运算符3+)
查看>>
sdut_1189
查看>>
归并排序
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
走遍美国 —— 各州及其别名
查看>>
国内外免费电子书(数学、算法、图像、深度学习、机器学习)
查看>>
狄利克雷过程(Dirichlet Process)
查看>>
五子棋项目的实现(二)博弈树算法的描述
查看>>
Hibernate : Disabling contextual LOB creation as createClob() method threw error
查看>>
【bzoj4872】[Shoi2017]分手是祝愿 期望dp
查看>>
字符串元转分
查看>>