高精度模板Bigint Killer

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 using namespace std;
 5 void r(int *a)
 6 {
 7     string b;cin>>b;
 8     int l=b.length();
 9     for (int i=1;i<=l;i++) a[i]=b[l-i]-‘0‘;
10     a[0]=l;
11 }
12 void w(int *a) {for (int i=a[0];i>=1;i--) cout<<a[i];cout<<endl;}
13 void cls(int *a) {memset(a,0,sizeof(int)*(a[0]+1));}
14 void cpy(int *a,int *b) {memcpy(b,a,sizeof(int)*(a[0]+1));}
15 bool cmp(int *a,int *b) {for (int i=0;i<=a[0];i++) if (a[i]!=b[i]) return a[i]>b[i];}
16 void add(int *a,int *b,int *c)
17 {
18     cls(c);int l=1;
19     while (l<=a[0]||l<=b[0]) {
20         c[l+1]=(c[l]+=a[l]+b[l])/10;
21         c[l++]%=10;
22     }
23     if (!c[l]) l--;c[0]=l;
24 }
25 void mul(int *a,int *b,int *c)
26 {
27     cls(c);int la=a[0],lb=b[0],l=la+lb;
28     for (int i=1;i<=la;i++) for (int j=1;j<=lb;j++) {
29         c[i+j]+=(c[i+j-1]+=a[i]*b[j])/10;
30         c[i+j-1]%=10;
31     }
32     while (c[l]==0&&l>1) l--;c[0]=l;
33 }
34 void dmul(int *a,int b,int *c)
35 {
36     cls(c);int l=1;
37     while (l<=a[0]||c[l]) {
38         c[l+1]=(c[l]+=a[l]*b)/10;
39         c[l++]%=10;
40     }
41     while (c[l]==0&&l>1) l--;c[0]=l;
42 }
43 void ddiv(int *a,int b,int *c)
44 {
45     cls(c);int l=a[0];
46     for (int i=l;i>=1;i--) {
47         c[i-1]=(c[i]+=a[i])%b*10;
48         c[i]/=b;
49     }
50     while (c[l]==0&&l>1) l--;c[0]=l;
51 }
时间: 2024-11-01 19:19:22

高精度模板Bigint Killer的相关文章

[Template]高精度模板

重新写一下高精度模板(不要问我为什么) 自认为代码风格比较漂亮(雾 如果有更好的写法欢迎赐教 封装结构体big B是压位用的进制,W是每位长度 size表示长度,d[]就是保存的数字,倒着保存,从1开始 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const i

高精度模板(Big_Int)

你还在为刷题时看到的高精度预警而苦恼吗? 你还在因为高精度难写而放弃宝贵的分数吗? 不用担心!让高精度模板 来帮助你! 目前已知bug: 长度最大值只能开到54724,超过这个值会爆炸(无法调试),目前原因未知 2018.09.07更新: 1.优化了高精乘以低精的速度. 2.输出优化,可使用.output()函数输出.(基于输出挂)@Jesse666 ps:那个长度最大值的bug有可能是栈空间的问题,可以试试更改栈空间有没有效果 2018.09.01更新: 1.鉴于@Jesse666同学的建议,

高精度模板(不定时更新)

以前写高精度基本都是抄别人的--这次要改变一下了-- 现在的高精度模板还是很简陋的,只支持高精加,减,乘,高精除低精,高精模低精,高精快速幂,高精比较大小,没了. 或许以后会不定期更新一下--毕竟这个还是比较ca的. 直接一股脑全贴上来吧--注意所有的元素都是倒叙存储的,想要改成压位的很简单,只要改一下模数,改一下输入输出即可. 也可以支持不同进制的运算,都是很好改的. struct big { int f[M],len; big() { memset(f,0,sizeof(f)),len =

[note]高精度模板

高精度模板 先定义一个struct struct gj{ int l,s[N]; bool fh; void Print(){ if(fh)putchar('-'); for(int i=l;i>=1;i--)printf("%d",s[i]); puts(""); } }blank; 高精+高精 加之前判断一下符号 一负一正转成减法 gj operator +(gj x,gj y){ gj z=blank;z.l=max(x.l,y.l); for(int

高精度模板(修改中)

这个是一个高精度的模板,还在完成中... 1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cstdlib> 5 #include<cmath> 6 #include<cstring> 7 #include<vector> 8 #define xh(a,b,c)for(int a=(b);a<=(c);a++) 9 #de

【高精度】【模板】高精度模板

没有什么好说的,照着模板写就是了,稍微用了点手段,支持负数的减法了 1 #include<cstdio> 2 #include<cstring> 3 #include<string> 4 #include<algorithm> 5 #include<vector> 6 #include<iostream> 7 using namespace std; 8 const int maxn=510; 9 struct bigint 10 {

XDOJ 1046 - 高精度模板综合测试 - [高精度模板]

题目链接:http://acm.xidian.edu.cn/problem.php?id=1046 题目描述 请输出两个数的和,差,积,商,取余.注意不要有前导零. 输入 多组数据,每组数据是两个整数A,B(0<=A<=10^100,0<B<=10^100). 输出 对于每组数据,输出五个整数,分别代表A+B,A-B,A*B,A/B,A%B. 样例输入5 211 3 样例输出7 3 10 2 114 8 33 3 2 模板注释: 本模板只能处理十进制非负大整数. AC代码: #in

真&#183;纯手撸高精度模板

耗时(50分钟)不压位 内容只有高精度+-*,因为其他我不会写QAQ~ 均ACluogu,codevs #include<bits/stdc++.h> using namespace std; const int N =(int)1e5+10; struct bignum { int m[N],len; char str[N]; int ok; bignum() {ok=1;len=1,memset(m,0, sizeof(m));} void in() {scanf("%s&quo

高精度模板2(带符号压位加减乘除开方封包)

原来的那个模板:http://www.cnblogs.com/iwtwiioi/p/3991331.html 估计已经不用了. 现在我重新封包好了一个,一定很好用QAQ 加减乘除带开方带压位带重载运算符 注意一下符号即可,一定写的时候要手推四种情况!! 然后在重载<的时候,一定要注意同时判断!!!!要不然又错.. struct big { typedef ll INT; static const INT S=100000000; static const int S_n=9; static co