1 //
2 // Created by alim on 2017/12/23.
3 //
4
5
6 #include <stdlib.h>
7 #include <cstring>
8 #include <iostream>
9 using namespace std;
10
11 #define M 100
12
13 char sa[1000];
14 char sb[1000];
15
16 typedef struct _Node{
17 int s[M];//数字
18 int l;//数字长度
19 }Node,*pNode;
20
21
22 void dzs_add(pNode pa,pNode pb,pNode result){
23 int i, cc;
24 pNode temp;
25
26 if (pa->l < pb->l) {
27 temp = pb;
28 pb = pa;
29 pa = temp;
30 }
31
32 for (int j = 0; j < pa->l; ++j) {
33 result->s[j] = pa->s[j];
34 }
35 result->l = pa->l;
36
37 cc = 0;
38 for (i = 0; i < pb->l; ++i) {
39 result->s[i] = (pa->s[i] + pb->s[i] + cc) % 10;
40 cc = (pa->s[i] + pb->s[i]) / 10;
41 }
42 if (cc != 0) {
43 result->s[i] = result->s[i]+cc;
44 }
45 if (i >= result->l) {
46 result->l = i+1;
47 }
48
49 return;
50 }
51
52 void dzs_jian(pNode pa,pNode pb,pNode result){
53 int i, cc;
54 pNode temp;
55
56 if (pa->l < pb->l) {
57 temp = pb;
58 pb = pa;
59 pa = temp;
60 }
61 for (int j = 0; j < pa->l; ++j) {
62 result->s[j] = pa->s[j];
63 }
64 result->l = pa->l;
65 cc = 0;
66 for (i = 0; i < pb->l; ++i) {
67 if (pa->s[i] >= pb->s[i]) {
68 result->s[i] = pa->s[i] - pb->s[i];
69 } else {
70 result->s[i + 1] -= 1;
71 result->s[i] = pa->s[i] + 10 - pb->s[i];
72 }
73 }
74 if (i >= result->l) {
75 result->l = i+1;
76 }
77 }
78 int main() {
79 Node ans,a,b;
80 cout << "请输入大整数 a:"<<endl;
81 cin >> sa;
82 cout << "请输入大整数 b:" << endl;
83 cin >> sb;
84 a.l = strlen(sa);//以字符串进行处理,计算长度
85 b.l = strlen(sb);
86
87 //倒向存储
88 int z=0,i;
89 for (int i = a.l-1; i >= 0; i--) {
90 a.s[z++] = sa[i]-'0';
91 }
92
93 z=0;
94 for (int i = b.l-1; i >= 0; i--) {
95 b.s[z++] = sb[i] - '0';
96 }
97 // dzs_add(&a, &b, &ans);
98 dzs_jian(&a, &b, &ans);
99 cout << "最终结果为:\n";
100 for (i = ans.l-1; i >= 0; i--) {
101 cout<<ans.s[i];
102 }
103
104 cout << endl;
105 return 0;
106 }