【模板】高精度

我之前一直觉得高精度很麻烦,然而今天一打才发现

这么个zz东西我居然还弃疗过(模板果然还是要自己打)

高精度加法

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 using namespace std;
 6 int lena,lenb,tot;
 7 char a[505],b[505];
 8 int aa[505],bb[505],c[505],x;
 9 void inti()
10 {
11     cin>>a;cin>>b;
12 }
13 void pre()
14 {
15      lena=strlen(a)-1;lenb=strlen(b)-1;
16      for(int i=0;i<=lena;i++) aa[lena-i]=a[i]-‘0‘;
17      for(int i=0;i<=lenb;i++) bb[lenb-i]=b[i]-‘0‘;
18 }
19 void work()
20 {
21     tot=max(lena,lenb);
22     for(int i=0;i<=tot;i++)
23     {
24         c[i]=aa[i]+bb[i]+x;
25         x=c[i]/10;c[i]%=10;
26     }
27     if(x>0) c[++tot]=x;
28 }
29 void pri()
30 {
31     while(tot>=0)
32     {
33         cout<<c[tot];
34         tot--;
35     }
36 }
37 int main()
38 {
39     inti();
40     pre();
41     work();
42     pri();
43     return 0;
44 }

高精度加法

高精度减法

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 using namespace std;
 6 int lena,lenb,tot;
 7 string a,b,d;
 8 int aa[505],bb[505],c[505],x;
 9 void inti()
10 {
11     cin>>a;cin>>b;
12     if((a.size()<b.size())||(a.size()==b.size()&&a<b))
13     {
14        cout<<"-";
15        d=a;a=b;b=d;
16     }
17 }
18 void pre()
19 {
20      lena=a.size()-1;lenb=b.size()-1;
21      for(int i=0;i<=lena;i++) aa[lena-i]=a[i]-‘0‘;
22      for(int i=0;i<=lenb;i++) bb[lenb-i]=b[i]-‘0‘;
23 }
24 void work()
25 {
26     tot=max(lena,lenb);
27     for(int i=0;i<=tot;i++)
28     {
29         c[i]=aa[i]-bb[i]-x;
30         if(c[i]<0) c[i]+=10,x=1;
31         else x=0;
32     }
33 }
34 void pri()
35 {
36     while(c[tot]==0&&tot>0) tot--;
37     while(tot>=0)
38     {
39         cout<<c[tot];
40         tot--;
41     }
42 }
43 int main()
44 {
45     inti();
46     pre();
47     work();
48     pri();
49     return 0;
50 }

高精度减法

高精度乘法

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 using namespace std;
 6 int lena,lenb,tot;
 7 char a[505],b[505];
 8 int aa[505],bb[505],c[505],x;
 9 void inti()
10 {
11     cin>>a;cin>>b;
12 }
13 void pre()
14 {
15      lena=strlen(a)-1;lenb=strlen(b)-1;
16      for(int i=0;i<=lena;i++) aa[lena-i]=a[i]-‘0‘;
17      for(int i=0;i<=lenb;i++) bb[lenb-i]=b[i]-‘0‘;
18 }
19 void work()
20 {
21     for(int i=0;i<=lena;i++)
22     for(int j=0;j<=lenb;j++)
23     c[i+j]+=aa[i]*bb[j];
24     tot=lena+lenb;
25     for(int i=0;i<=tot;i++)
26     {
27         c[i]+=x;
28         x=c[i]/10;
29         c[i]=c[i]%10;
30     }
31     while(x>0)
32     {
33         c[++tot]=x%10;
34         x=x/10;
35     }
36 }
37 void pri()
38 {
39     while(tot>=0)
40     {
41         cout<<c[tot];
42         tot--;
43     }
44 }
45 int main()
46 {
47     inti();
48     pre();
49     work();
50     pri();
51     return 0;
52 }

高精度乘法

以上By hahaCarrot 。转载请注明出处  http://www.cnblogs.com/LQ-double/

时间: 2024-08-03 17:37:07

【模板】高精度的相关文章

模板 高精度大整数

#include<bits/stdc++.h> #define clr(x,y) memset((x),(y),sizeof(x)) using namespace std; typedef long long LL; const int MaxL=400; //大数长度 //大整数 //减法只能大减小 struct bign { int len, s[MaxL]; //构造函数 bign () { memset(s, 0, sizeof(s)); len = 1; } bign (int n

模板 高精度 转自郭爷

//http://www.cnblogs.com/HarryGuo2012/p/4524041.html #include<string> #include<iostream> #include<iosfwd> #include<cmath> #include<cstring> #include<stdlib.h> #include<stdio.h> #include<cstring> #define MAX_

模板 高精度

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<queue> 5 #define ms(a,b) memset(a,b,sizeof a) 6 #define rep(i,a,n) for(int i = a;i <= n;i++) 7 #define per(i,n,a) for(int i = n;i >= a;i--) 8 #define inf

模板库

read()+print() inline int read() { char ch; bool bj=0; while(!isdigit(ch=getchar())) bj|=(ch=='-'); int res=ch^(3<<4); while(isdigit(ch=getchar())) res=(res<<1)+(res<<3)+(ch^(3<<4)); return bj?-res:res; } void printnum(int x) { if(

[Template]高精度模板

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

大数高精度运算(模板)

前言:高精度运算.是指參与运算的数(加数.减数,因子--)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算. 模板:包含大数加减乘除.大数与int数的乘法,模板能够不断扩充. 代码: /* 所有亲測可用,可是不能用于负数的运算,仅仅能对正数进行大数运算 */ const int ten[4]= {1,10,100,1000}; const int maxl = 300; struct BigNumber { int d[maxl]; char s[maxl]; BigNumber(co

poj1220:高精度进制转换模板题

今天撸3708  一直奇怪的re 就先放下了,写这个题的过程中学习了一个高精度进制转换,用这个模板写了1220 记录一下: #include <iostream> #include <stdio.h> #include<string.h> #include<algorithm> #include<string> #include<ctype.h> using namespace std; #define MAXN 10000 char

【原创】高精度(压位储存)模板

无聊写了个高精度模板玩玩...... 1 /* 2 高精度(压位储存) 3 */ 4 #include <cstdlib> 5 #include <iostream> 6 #include <cstdio> 7 #include <cstring> 8 #include <cmath> 9 const int MAX=10005;//最长长度 10 using namespace std; 11 //高精度结构体,先声明后实现 12 struct

高精度模板(修改中)

这个是一个高精度的模板,还在完成中... 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