高精度简单练习 【模板】
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 }
——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。