高精度(加减乘除

 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=1e6+5;
18 
19 string s1,s2;
20 int a[10001],b[10001],n,len1,len2;
21 
22 int compare()
23 {
24     if(len1>len2)   return 1;
25     if(len1<len2)   return -1;
26     for(int i=0;i<len1;i++){
27         if(s1[i]>s2[i]) return 1;
28         if(s1[i]<s2[i]) return -1;
29     }
30     return 0;
31 }
32 void cun()
33 {
34     cin>>s1>>s2;
35     len1=s1.length();
36     len2=s2.length();
37     for(int i=1;i<=len1;i++)
38         a[i]=s1[len1-i]-'0';
39     for(int i=1;i<=len2;i++)
40         b[i]=s2[len2-i]-'0';
41 }
42 
43 void Plus()
44 {
45     int w=max(len1,len2);
46     for(int i=1;i<=w;i++)
47     {
48         a[i+1] +=(a[i]+b[i])/n;
49         a[i] =(a[i]+b[i])%n;
50     }
51     if(a[w+1] ) w++;
52     for(int i=w;i>=1;i--)
53         cout<<a[i];
54 }
55 
56 void Minus()
57 {
58     int sign=compare();
59     int w=max(len1,len2);
60     if(sign==0){
61         cout<<0<<endl; return;
62     }
63     if(sign==1){
64         for(int i=1;i<=w;i++)
65         {
66             if(a[i]<b[i]) a[i]+=10, a[i+1]--;
67             a[i]=a[i]-b[i];
68         }
69     }
70     if(sign==-1){
71         for(int i=1;i<=w;i++)
72         {
73             if(b[i]<a[i]) b[i]+=10, b[i+1]--;
74             a[i]=b[i]-a[i];
75         }
76         cout<<'-';
77     }
78     while(a[w]==0){
79         w--;
80     } //首不能为0:
81     for(int i=w;i>=1;i--)
82             cout<<a[i];
83 }
84 
85 int main()
86 {
87     cun();
88     Minus();
89 }

猜你喜欢

转载自www.cnblogs.com/thunder-110/p/9288426.html
今日推荐