利用C語言實現大數加減法
阿新 • • 發佈:2019-01-25
大數加法:
#include <stdio.h> #include <string.h> #define M 100 //定義了數量M是100作為陣列初始化的數量 int main() { int i, j, len_s1, len_s2; // len_s1是字元陣列s1的長度, len_s2是字元陣列s2的長度, char s1[M], s2[M]; int num1[M] = {0}; // 數字陣列num1 int num2[M] = {0}; // 數字陣列num2 scanf("%s %s", s1, s2); len_s1 = strlen(s1); // 求第一個加數的位數 len_s2 = strlen(s2); // 求第二個加數的位數 for(i=len_s1-1, j=0; i>=0; i--) //將字元陣列轉化為數字陣列,並倒數存放,作為第一個加數 { num1[j] = s1[i] - '0'; j++; } for(i=len_s2-1, j=0; i>=0; i--) //將字元陣列轉化為數字陣列,並倒數存放,作為第二個加數 { num2[j] = s2[i] - '0'; j++; } for(i=0; i<=M; i++) //實現大數的加法 { num1[i] = num1[i]+num2[i]; if(num1[i]>9) { num1[i] = num1[i]-10; num1[i+1]++; } } for(i=M-1; i>=0&&num1[i]==0; i--); //求得最終結果的位數 if(i>0) { for(; i>=0; i--) //最終答案的輸出 { printf("%d", num1[i]); } } else printf("0"); return 0; }
大數減法:
#include <stdio.h> #include <string.h> //設定初始陣列個數為100 #define M 100 int main() { char str_a[M], str_b[M]; // 字元陣列的初始化 int num_a[M] = {0}; // 被減數陣列 int num_b[M] = {0}; // 減數陣列 int num_c[M]; // 差值陣列 int len_a, len_b; // 被減數位數,減數位數 int i, j, k, n, f=0; scanf("%s %s", str_a, str_b); len_a = strlen(str_a); len_b = strlen(str_b); //K的值是參與運算的資料最大位數 if(len_a>len_b) k = len_a; else k = len_b; num_c[0] = 0; //n>0表示a>b, n<0表示a<b, n=0表示a=b if(len_a > len_b) n = 1; else if(len_a == len_b) n = strcmp(str_a, str_b); else n = -1; //字元陣列倒序後位數對齊存在整數陣列中 for(i=len_a-1, j=0; i>=0; i--, j++) { num_a[j] = str_a[i] - '0'; } for(i=len_b-1, j=0; i>=0; i--, j++) { num_b[j] = str_b[i] - '0'; } //具體執行減法運算 for(i=0; i<k; i++) { if(n>=0) { if(num_a[i]-num_b[i] >= 0) num_c[i] = num_a[i] - num_b[i]; else { num_c[i] = num_a[i] + 10 - num_b[i]; num_a[i+1]--; } } else { if(num_b[i]-num_a[i] >= 0) num_c[i] = num_b[i] - num_a[i]; else { num_c[i] = num_b[i] + 10 - num_a[i]; num_b[i+1]--; } } } //最終結果的輸出 if(n<0) printf("-"); for(i=k-1; i>=0; i--) { if(num_c[i]) f=1; if(f||i==0) printf("%d", num_c[i]); } printf("\n"); return 0; }