大数算法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 const int maxnum = 100; 6 7 using namespace std; 8 9 int a[maxnum], b[maxnum]; 10 11 void BigNumber_add(int a[], int b[], int n1, int n2) 12 { 13 int tmp = max(n1, n2); 14 for(int i = 0; i < tmp; i++){ 15 a[i] += b[i]; 16 if(a[i] > 9){ 17 a[i] -= 10; 18 a[i+1]++; 19 } 20 } 21 int flag = 0; 22 for(int i = tmp; i >= 0; i--) 23 if(a[i] != 0){ 24 flag = i; 25 break; 26 } 27 28 for(int i = flag; i >= 0; i--) 29 cout << a[i]; 30 31 } 32 33 int main() 34 { string s1, s2; 35 cin >> s1 >> s2; 36 int n1 = s1.length(); 37 int n2 = s2.length(); 38 memset(a, 0, sizeof(a)); 39 memset(b, 0, sizeof(b)); 40 for(int i = 0; i < n1; i++) 41 a[i] = s1[n1-i-1] - '0'; 42 for(int i = 0; i < n2; i++) 43 b[i] = s2[n2-i-1] - '0'; 44 BigNumber_add(a, b, n1, n2);// test add 45 return 0; 46 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cstring> 3 #include <string> 4 #include <cstdio> 5 using namespace std; 6 const int maxnum = 100; 7 void BigNumber_sub(char *s1, char *s2) 8 { 9 10 } 11 int compare(char *s1, char *s2) 12 { 13 int n1 = strlen(s1); 14 int n2 = strlen(s2); 15 if(n1 > n2) 16 return 1; 17 else if(n1 < n2) 18 return -1; 19 else if(n1 == n2) 20 return strcmp(s1, s2); 21 } 22 void stio(char *str, int *a) 23 { int tmp = strlen(str); 24 for(int i = 0; i < tmp; i++) 25 a[i] = str[tmp-i-1] - '0'; 26 } 27 void print(int *c, int n, int maxlen){ 28 if(n < 0) 29 cout << "-"; 30 int flag = 0; 31 for(int i = maxlen-1; i >= 0; i--){ 32 if(c[i] != 0) 33 flag = 1; 34 if(flag || i == 0) 35 cout << c[i]; 36 } 37 cout << endl; 38 } 39 int main() 40 { 41 char s1[maxnum], s2[maxnum]; 42 43 while(cin >> s1 >> s2){ 44 int a[maxnum]={0}, b[maxnum]={0}, c[maxnum]; 45 int t1 = strlen(s1), t2 = strlen(s2); 46 int maxlen = t1>t2? t1: t2; 47 int cmp = compare(s1, s2); 48 stio(s1, a); 49 stio(s2, b); 50 for(int i = 0; i < maxlen; i++){ 51 if(cmp >= 0){ 52 if(a[i] >= b[i]) 53 c[i] = a[i] - b[i]; 54 else{ 55 c[i] = a[i]-b[i]+10; 56 a[i+1]--; 57 } 58 } else 59 { 60 if(b[i] >= a[i]) 61 c[i] = b[i]-a[i]; 62 else{ 63 c[i] = b[i] -a[i]+10; 64 b[i+1]--; 65 } 66 } 67 } 68 print(c, cmp, maxlen); 69 } 70 return 0; 71 }