高精度简单练习 【模板】

codevs 3115 3116 3117

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 string str_a,str_b;
 8 int c[555],a[555],b[555];
 9 int len_a,len_b,len_c,x;
10     
11 void add()
12 {
13     memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));
14     for(int i=0;i<len_a;i++) a[len_a-i]=str_a[i]-'0';
15     for(int i=0;i<len_b;i++) b[len_b-i]=str_b[i]-'0';
16     len_c=1,x=0;
17     while(len_c<=len_a||len_c<=len_b)
18     {
19         c[len_c]=a[len_c]+b[len_c]+x;
20         x=c[len_c]/10;
21         c[len_c]%=110;
22         len_c++;
23     }
24     c[len_c]=x;
25     while(c[len_c]==0) len_c--;
26     for(int i=len_c;i>=1;i--)
27         cout<<c[i];
28     cout<<endl;
29 }
30 
31 void subtract()
32 {
33     memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));
34     if(len_a<len_b||(len_a==len_b&&str_a[0]<str_b[0]))
35     {
36         cout<<'-';
37         swap(str_a,str_b);
38         swap(len_a,len_b);
39     }
40     for(int i=0;i<len_a;i++) a[len_a-i]=str_a[i]-'0';
41     for(int i=0;i<len_b;i++) b[len_b-i]=str_b[i]-'0';
42     len_c=1;
43     while(len_c<=len_a||len_c<=len_b)
44     {
45         if(a[len_c]<b[len_c]||a[len_c]<0)
46         {
47             a[len_c]+=10;
48             a[len_c+1]--;
49         }
50         c[len_c]=a[len_c]-b[len_c];
51         len_c++;
52     }
53     while(c[len_c]==0&&len_c>1)    len_c--;
54     for(int i=len_c;i>=1;i--)
55         cout<<c[i];
56     cout<<endl;
57 }
58 
59 void multiply()
60 {
61     memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));
62     for(int i=0;i<len_a;i++) a[len_a-i]=str_a[i]-'0';
63     for(int i=0;i<len_b;i++) b[len_b-i]=str_b[i]-'0';
64     len_c=1,x=0;
65     for(int i=1;i<=len_a;i++)
66     {
67         x=0;
68         for(int j=1;j<=len_b;j++)
69         {
70             c[i+j-1]+=a[i]*b[j]+x;
71             x=c[i+j-1]/10;
72             c[i+j-1]%=10;
73         }
74         c[i+len_b]=x;
75     }
76     len_c=len_a+len_b;
77     while(c[len_c]==0&&len_c>1)    len_c--;
78     for(int i=len_c;i>=1;i--)
79         cout<<c[i];
80     cout<<endl;
81 }
82 
83 int main()
84 {
85     cin>>str_a>>str_b;
86     len_a=str_a.length(),
87     len_b=str_b.length();
88     add();subtract();multiply();
89     return 0;
90 }
——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
原文地址:https://www.cnblogs.com/Shy-key/p/6653583.html