高精度(加减乘除

 

 https://www.cnblogs.com/ECJTUACM-873284962/p/6509429.html

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<string>
 6 #include<cmath>
 7 #include<set>
 8 #include<vector>
 9 #include<stack>
10 #include<queue>
11 #include<map>
12 using namespace std;
13 #define ll long long
14 #define se second
15 #define fi first
16 const int INF= 0x3f3f3f3f;
17 const int N=4e6+5;
18 
19 string s1,s2;
20 int a[2001],b[2001],c[4002],len1,len2;
准备工作

 

 1 void cun()
 2 {
 3     cin>>s1>>s2;
 4     len1=s1.length();
 5     len2=s2.length();
 6     for(int i=1;i<=len1;i++)
 7         a[i]=s1[len1-i]-'0';
 8     for(int i=1;i<=len2;i++)
 9         b[i]=s2[len2-i]-'0';
10 }
字符串输入,化为数组

 

 1 int compare()
 2 {
 3     if(len1>len2)   return 1;
 4     if(len1<len2)   return -1;
 5     for(int i=0;i<len1;i++){
 6         if(s1[i]>s2[i]) return 1;
 7         if(s1[i]<s2[i]) return -1;
 8     }
 9     return 0;
10 }
比较两个输入的数 的大小

 

 1 void Plus()
 2 {
 3     int w=max(len1,len2);
 4     for(int i=1;i<=w;i++)
 5     {
 6         a[i+1] +=(a[i]+b[i])/10;
 7         a[i] =(a[i]+b[i])%10;
 8     }
 9     if(a[w+1] ) w++;
10     for(int i=w;i>=1;i--)
11         cout<<a[i];
12 }
加法

 

 1   void Minus()
 2 {
 3     int sign=compare();
 4     int w=max(len1,len2);
 5     if(sign==0){
 6         cout<<0<<endl; return;
 7     }
 8     if(sign==1){
 9         for(int i=1;i<=w;i++)
10         {
11             if(a[i]<b[i]) a[i]+=10, a[i+1]--;
12             a[i]=a[i]-b[i];
13         }
14     }
15     if(sign==-1){
16         for(int i=1;i<=w;i++)
17         {
18             if(b[i]<a[i]) b[i]+=10, b[i+1]--;
19             a[i]=b[i]-a[i];
20         }
21         cout<<'-';
22     }
23     while(a[w]==0){
24         w--;
25     } //首不能为0:
26     for(int i=w;i>=1;i--)
27             cout<<a[i];
28 }
减法(需要compare函数了)

 

 1 void Multiply() //高精度*高精度
 2 {
 3     int len=len1+len2;
 4     for(int i=0;i<len1;i++)  //只能都从0开始。。上面的cun()函数 要s1[len1-i-1]
 5     {
 6         for(int j=0;j<len2;j++)
 7         {
 8             c[i+j] += a[i]*b[j];
 9             c[i+j+1] +=  c[i+j]/10;
10             c[i+j] = c[i+j]%10;
11         }
12     }
13         if(c[len]==0) len--;//判断存不存在首位进位的情况
14         if(c[len-1]==0) //判断存不存在 0*100=0 这样的情况
15             cout<<0;
16         else
17             for(int i=len-1;i>=0;i--)
18                 cout<<c[i];
19 }
乘法(高精度*高精度)

 

高精度除以低精度

posted @ 2018-07-10 12:46  木流牛马  阅读(160)  评论(0编辑  收藏  举报