C++大数板子

使用样例在主函数里看就好,必要的运算符都重载了。

  1. #include <iostream>
  2. using namespace std;
  3. const int maxn=;/*精度位数,自行调整*/
  4. //1.如果需要控制输出位数的话,在str()里面把len调成需要的位数
  5. //2.很大的位数是会re的,所以如果是幂运算的话,如 计算x^p的位数n, n=p*log(10)x+1;(注意要加一)
  6. //3.还可以加上qmul,取模的过程也就是str(),c_str()再搞一次
  7. class bign{
  8. friend istream& operator>>(istream&,bign&);
  9. friend ostream& operator<<(ostream&,const bign&);
  10. friend bign operator+(const bign&,const bign&);
  11. friend bign operator+(const bign&,int&);
  12. friend bign operator*(const bign&,const bign&);
  13. friend bign operator*(const bign&,int&);
  14. friend bign operator-(const bign&,const bign&);
  15. friend bign operator-(const bign&,int&);
  16. friend bign operator/(const bign&,const bign&);
  17. friend bign operator/(const bign&,int&);
  18. friend bign operator%(const bign&,const bign&);
  19. friend bign operator%(const bign&,int&);
  20. friend bool operator<(const bign&,const bign&);
  21. friend bool operator>(const bign&,const bign&);
  22. friend bool operator<=(const bign&,const bign&);
  23. friend bool operator>=(const bign&,const bign&);
  24. friend bool operator==(const bign&,const bign&);
  25. friend bool operator!=(const bign&,const bign&);
  26.  
  27. private://如果想访问len,改成public
  28. int len,s[maxn];
  29. public:
  30. bign(){
  31. memset(s,,sizeof(s));
  32. len=;
  33. }
  34. bign operator=(const char* num){
  35. int i=,ol;
  36. ol=len=strlen(num);
  37. while(num[i++]==''&&len>)
  38. len--;
  39. memset(s,,sizeof(s));
  40. for(i=; i<len; i++)
  41. s[i]=num[ol-i-]-'';
  42. return *this;
  43. }
  44. bign operator=(int num){
  45. char s[maxn];
  46. sprintf(s,"%d",num);
  47. *this=s;
  48. return *this;
  49. }
  50. bign(int num){
  51. *this=num;
  52. }
  53. bign(const char* num){
  54. *this=num;
  55. }
  56. string str() const{
  57. string res="";
  58. for(int i=; i<len; i++)
  59. res=char(s[i]+'')+res;
  60. if(res=="")
  61. res="";
  62. return res;
  63. }
  64. };
  65. bool operator<(const bign& a,const bign& b){
  66. int i;
  67. if(a.len!=b.len)
  68. return a.len<b.len;
  69. for(i=a.len-; i>=; i--)
  70. if(a.s[i]!=b.s[i])
  71. return a.s[i]<b.s[i];
  72. return false;
  73. }
  74. bool operator>(const bign& a,const bign& b){
  75. return b<a;
  76. }
  77. bool operator<=(const bign& a,const bign& b){
  78. return !(a>b);
  79. }
  80. bool operator>=(const bign& a,const bign& b){
  81. return !(a<b);
  82. }
  83. bool operator!=(const bign& a,const bign& b){
  84. return a<b||a>b;
  85. }
  86. bool operator==(const bign& a,const bign& b){
  87. return !(a<b||a>b);
  88. }
  89. bign operator+(const bign& a,const bign& b){
  90. int up=max(a.len,b.len);
  91. bign sum;
  92. sum.len=;
  93. for(int i=,t=;t||i<up; i++)
  94. {
  95. if(i<a.len)
  96. t+=a.s[i];
  97. if(i<b.len)
  98. t+=b.s[i];
  99. sum.s[sum.len++]=t%;
  100. t/=;
  101. }
  102. return sum;
  103. }
  104. bign operator+(const bign& a,int& b){
  105. bign c=b;
  106. return a+c;
  107. }
  108. bign operator*(const bign& a,const bign& b){
  109. bign res;
  110. for(int i=; i<a.len; i++)
  111. {
  112. for(int j=; j<b.len; j++)
  113. {
  114. res.s[i+j]+=(a.s[i]*b.s[j]);
  115. res.s[i+j+]+=res.s[i+j]/;
  116. res.s[i+j]%=;
  117. }
  118. }
  119. res.len=a.len+b.len;
  120. while(res.s[res.len-]==&&res.len>)
  121. res.len--;
  122. if(res.s[res.len])
  123. res.len++;
  124. return res;
  125. }
  126. bign operator*(const bign& a,int& b){
  127. bign c=b;
  128. return a*c;
  129. }
  130. //只支持大数减小数
  131. bign operator-(const bign& a,const bign& b){
  132. bign res;
  133. int len=a.len;
  134. for(int i=; i<len; i++)
  135. {
  136. res.s[i]+=a.s[i]-b.s[i];
  137. if(res.s[i]<)
  138. {
  139. res.s[i]+=;
  140. res.s[i+]--;
  141. }
  142. }
  143. while(res.s[len-]==&&len>)
  144. len--;
  145. res.len=len;
  146. return res;
  147. }
  148. bign operator-(const bign& a,int& b){
  149. bign c=b;
  150. return a-c;
  151. }
  152. bign operator/(const bign& a,const bign& b){
  153. int i,len=a.len;
  154. bign res,f;
  155. for(i=len-; i>=; i--)
  156. {
  157. f=f*;
  158. f.s[]=a.s[i];
  159. while(f>=b)
  160. {
  161. f=f-b;
  162. res.s[i]++;
  163. }
  164. }
  165. while(res.s[len-]==&&len>)
  166. len--;
  167. res.len=len;
  168. return res;
  169. }
  170. bign operator/(const bign& a,int& b){
  171. bign c=b;
  172. return a/c;
  173. }
  174. bign operator%(const bign& a,const bign& b){
  175. int len=a.len;
  176. bign f;
  177. for(int i=len-; i>=; i--)
  178. {
  179. f=f*;
  180. f.s[]=a.s[i];
  181. while(f>=b)
  182. f=f-b;
  183. }
  184. return f;
  185. }
  186. bign operator%(const bign& a,int& b){
  187. bign c=b;
  188. return a%c;
  189. }
  190. bign& operator+=(bign& a,const bign& b){
  191. a=a+b;
  192. return a;
  193. }
  194. bign& operator-=(bign& a,const bign& b)
  195. {
  196. a=a-b;
  197. return a;
  198. }
  199. bign& operator*=(bign& a,const bign& b){
  200. a=a*b;
  201. return a;
  202. }
  203. bign& operator/=(bign& a,const bign& b){
  204. a=a/b;
  205. return a;
  206. }
  207. bign& operator++(bign& a){
  208. a=a+;
  209. return a;
  210. }
  211. bign& operator++(bign& a,int){
  212. bign t=a;
  213. a=a+;
  214. return t;
  215. }
  216. bign& operator--(bign& a){
  217. a=a-;
  218. return a;
  219. }
  220. bign& operator--(bign& a,int){
  221. bign t=a;
  222. a=a-;
  223. return t;
  224. }
  225. istream& operator>>(istream &in,bign& x){
  226. string s;
  227. in>>s;
  228. x=s.c_str();
  229. return in;
  230. }
  231. ostream& operator<<(ostream &out,const bign& x){
  232. out<<x.str();
  233. return out;
  234. }
  235. int main(){
  236. bign a;
  237. bign b;
  238. cin>>a>>b;
  239. cout<<a%b<<endl;
  240. cout<<a-b<<endl;
  241. return ;
  242. }

C++大数板子的更多相关文章

  1. hdu 5666 Segment 俄罗斯乘法或者套大数板子

    Segment Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem ...

  2. POJ 1737 Connected Graph (大数+递推)

    题目链接: http://poj.org/problem?id=1737 题意: 求 \(n\) 个点的无向简单(无重边无自环)连通图的个数.\((n<=50)\) 题解: 这题你甚至能OEIS ...

  3. 2019 ICPC 银川站

    I. Base62(高精度进制转换) 比赛当时雷菊苣和队长俩人拿着大数板子摸了一百多行(然后在缺少大数板子的情况下雷菊苣一发过了orz) 今天补题随便摸了个高精度进制转换的板子交上去就过了还贼短,, ...

  4. 模拟赛小结:2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018)

    比赛链接:传送门 两个半小时的时候横扫了铜.银区的所有题,签到成功混进金区.奈何后面没能开出新的题. 最后一个小时的时候xk灵机一动想出了D题的做法,讨论了一波感觉可行,赶紧去敲.结束前2分钟终于过了 ...

  5. 树的计数 Prüfer编码与Cayley公式 学习笔记

    最近学习了Prüfer编码与Cayley公式,这两个强力的工具一般用于解决树的计数问题.现在博主只能学到浅层的内容,只会用不会证明. 推荐博客:https://blog.csdn.net/moreja ...

  6. Pollard_rho定理 大数的因数个数 这个板子超级快

    https://nanti.jisuanke.com/t/A1413 AC代码 #include <cstdio> #include <cstring> #include &l ...

  7. hdu_1042(模拟大数乘法)

    计算n! #include<cstring> #include<cstdio> using namespace std; ]; int main() { int n; whil ...

  8. [HNOI 2016]大数

    Description 题库链接 给你一个长度为 \(n\) ,可含前导零的大数,以及一个质数 \(p\) . \(m\) 次询问,每次询问你一个大数的子区间 \([l,r]\) ,求出子区间中有多少 ...

  9. ACM-ICPC 2018 焦作赛区网络预赛 J Participate in E-sports(大数开方)

    https://nanti.jisuanke.com/t/31719 题意 让你分别判断n或(n-1)*n/2是否是完全平方数 分析 二分高精度开根裸题呀.经典题:bzoj1213 用java套个板子 ...

随机推荐

  1. 常用模块(datatime)

    import datetime,time# dt = datetime.datetime.now() # 获取当前时间的时间对象# dt = datetime.date.fromtimestamp(t ...

  2. 小红帽安装centos的yum的一些坑!

    [root@localhost ~]# lsanaconda-ks.cfg yum-3.4.3-158.el7.centos.noarch.rpm yum-updateonboot-1.1.31-45 ...

  3. java_链表反转

    定义一个Node节点类 1 public class Node { 2 public int value; 3 public Node next; 4 5 public Node(int value) ...

  4. poj 1840 枚举

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 13967   Accepted: 6858 Description ...

  5. kafka+windows+java+springboot中的配置

    1.百度kafka+zookeeper+windows配置 1.1  zookeeper配置 dataDir=/tmp/zookeeper # the port at which the client ...

  6. lua中如何识别C语言中的struct

    不如用c写比较简单呢 都要在lua中解析好数据结构,不过也可以用ffi呢...proto.lua

  7. Scala 基础(1)—— 定义变量 & 定义函数

    1. 使用 val & var 定义变量 Scala 中的变量被分为2种:val 和 var.其含义于 Java 中的 final 关键字类似. val 等同于被 final 修饰过的变量, ...

  8. Spring 对数据库的支持

    DAO DAO是用于访问数据的对象,大多数时候,我们将数据保存在数据库中,但这不是唯一选择. 用户也可以将数据保存在数据文件或者LDAP中 DAO屏蔽了数据操作的具体细节 Spring本质上希望能够以 ...

  9. Unity Shader-GodRay,体积光(BillBoard,Volume Shadow,Raidal Blur,Ray-Marching)

    好久没有更新博客了,经历了不少事情,好在最近回归了一点正轨,决定继续Unity Shader的学习之路.作为回归的第一篇,来玩一个比较酷炫的效果(当然废话也比较多),一般称之为GodRay(圣光),也 ...

  10. 洛谷 P1136 迎接仪式 解题报告

    P1136 迎接仪式 题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出&q ...