大数算法

 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 }
View Code
 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 }
View Code

 

posted @ 2014-08-15 14:44  tt_tt--->  阅读(58)  评论(0编辑  收藏  举报