大数类
来源:互联网 发布:mac开机头像怎么设置 编辑:程序博客网 时间:2024/04/29 23:54
自己懒得写,写了也容易被卡,所以很无耻的从别人那里偷来了大数类的模板,吼吼!
struct BigInt{ const static int mod = 10000; const static int DLEN = 4; int a[600],len; BigInt() { memset(a,0,sizeof(a)); len = 1; } BigInt(int v) { memset(a,0,sizeof(a)); len = 0; do { a[len++] = v%mod; v /= mod; }while(v); } BigInt(const char s[]) { memset(a,0,sizeof(a)); int L = strlen(s); len = L/DLEN; if(L%DLEN)len++; int index = 0; for(int i = L-1;i >= 0;i -= DLEN) { int t = 0; int k = i - DLEN + 1; if(k < 0)k = 0; for(int j = k;j <= i;j++) t = t*10 + s[j] - '0'; a[index++] = t; } } BigInt operator +(const BigInt &b)const { BigInt res; res.len = max(len,b.len); for(int i = 0;i <= res.len;i++) res.a[i] = 0; for(int i = 0;i < res.len;i++) { res.a[i] += ((i < len)?a[i]:0)+((i < b.len)?b.a[i]:0); res.a[i+1] += res.a[i]/mod; res.a[i] %= mod; } if(res.a[res.len] > 0)res.len++; return res; } BigInt operator *(const BigInt &b)const { BigInt res; for(int i = 0; i < len;i++) { int up = 0; for(int j = 0;j < b.len;j++) { int temp = a[i]*b.a[j] + res.a[i+j] + up; res.a[i+j] = temp%mod; up = temp/mod; } if(up != 0) res.a[i + b.len] = up; } res.len = len + b.len; while(res.a[res.len - 1] == 0 &&res.len > 1)res.len--; return res; } void output() { printf("%d",a[len-1]); for(int i = len-2;i >=0 ;i--) printf("%04d",a[i]); printf("\n"); }};
0 0
- 大数相乘 大数类
- 大数类
- 大数类
- 大数类
- 大数类
- 大数类
- 大数类
- 大数类
- 大数类
- 大数类
- c++ 大数类 大数模板
- C++ 大数类 大数模板
- c++ 大数类 大数模板
- c++ 大数类 大数模板
- c++ 大数类 大数模板
- C++大数类 大数模版
- 大数运算和大数类
- C++ 大数类 大数模板
- 面试 笔记
- BZOJ 1907 树的路径覆盖 树形DP
- Oracle 11g基础简介(《Oracle从入门到精通》读书笔记1)
- 《C语言及程序设计》程序阅读——用switch语句实现多分支结构
- 《C语言及程序设计》程序阅读——if语句的嵌套
- 大数类
- java面试题 "aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
- UVA - 11729 Commando War (贪心)
- 10个学习Android开发的网站推荐
- 朱丽安-摩尔凭《依然爱丽丝》获奥斯卡最佳女主角
- 蓝桥杯- 蚂蚁感冒
- 【hibernate框架】EJBQL第二部分
- 【POJ】1171 求矩形并的周长(线段树+扫描线+离散化)
- pat1020