- 何謂大數?
 
目前C只能存到最高64bit,大約是19位,超過即為大數。
在這邊先弄清楚各個type最多可存幾位
32bit- int:約9位
64bit - long long :約19位
- 如何評估運算之後會是幾位數?
 
2位數 + 3位數 <= 4位數
2位數 x 3位數 <= 5位數
- 用陣列存大數,個位數靠前,後面要補0 (不補0也可,但要記長度)
 
e.g. 若我要存123456789
1 
 | int num[MAX_LENGTH] = {9,8,7,6,5,4,3,2,1,0,0,0}; | 
Code (十進位&百進位)
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
 | #include <cstdio>#include <cstdlib>#include <cmath>#define MAX_LENGTH 15using namespace std;void big_add(int *num1, int *num2, int *answer){    int carry = 0;    for (int i = 0; i < MAX_LENGTH; i++) {        answer[i] = (num1[i]+num2[i]+carry)%10;        carry = (num1[i]+num2[i]+carry)/10;        /*answer[i] = (num1[i]+num2[i]+carry)%100;        carry = (num1[i]+num2[i]+carry)/100;*/    }    if (carry != 0) printf("Overflow!\n");}void big_mul(int *num1, int *num2, int *answer){    for(int i=0; i< MAX_LENGTH; i++) answer[i] = 0;    int carry;    for (int i=0; i< MAX_LENGTH; i++) {        carry = 0;        for (int j=0; j< MAX_LENGTH; j++) {            if ((i+j) < MAX_LENGTH){ /*not overflow*/                int tmp = answer[i+j]+num2[i]*num1[j]+carry;                answer[i+j] = tmp%10;                carry = tmp/10;                /*answer[i+j] = tmp%10;                carry = tmp/10;*/            }        }    }}void big_sub(int *num1, int *num2, int *answer){    /*num1>=num2且都為正*/    int borrow = 0; //0或-1    for (int i=0; i< MAX_LENGTH; i++) {        answer[i] = num1[i]-num2[i]+borrow;        if (answer[i] < 0){ //借位            answer[i] += 10;            //answer[i] += 100;            borrow = -1;        }        else borrow = 0;    }    if (borrow != 0) printf("Underflow!\n");}void output(int *answer){    int flag = 0;    for (int i = MAX_LENGTH; i >= 0; i--) {        if (answer[i]!=0 && flag==0) flag = 1;        if (flag==1) printf("%d",answer[i]);    }    printf("\n");}int main(){    int b[MAX_LENGTH] = {2,1,5,6,2,8,3,0,0,0,0,0,0,0,0};    int a[MAX_LENGTH] = {3,7,8,9,3,2,5,0,0,0,0,0,0,0,0};    /*int a[MAX_LENGTH] = {23,11,52,65,0,0,0,0,0,0,0,0,0,0,0};    int b[MAX_LENGTH] = {37,72,86,91,0,0,0,0,0,0,0,0,0,0,0};*/    int answer[MAX_LENGTH];    big_add(a, b, answer);    printf("ADD : "), output(answer);    big_mul(a, b, answer);    printf("MUL : "), output(answer);    big_sub(a, b, answer);    printf("SUB : "), output(answer);    return 0;} |