大數的四則運算

2021-06-17 15:09:14 字數 2881 閱讀 7519

演算法與思路:大數的加,減,乘演算法比較簡單,模擬列豎式的計算過程就好;

除法模擬實現比較困難,採用減法的形式實現,例如對於大數a / b,如果a < b,

則直接輸出商為0,否則,將a的最後strlen(b)位重複減去b,直到得數小於b,

將執行減法的次數賦給商的個位,然後將b的最後添上乙個0,相當於乘以10;

繼續執行上述步驟,到a-b <= 0為止,詳見**.

**實現:

1)大數加法

#include#include#define max 505

int main()

, m[max] = , s[max] = ;

int len_a, len_b, len_max;

scanf("%s%s", a, b);

len_a = strlen(a);

len_b = strlen(b);

for(int i = 0; i < len_a; i++)

n[i] = a[len_a - 1 - i] - '0';

for(int i = 0; i < len_b; i++)

m[i] = b[len_b - 1 - i] - '0';

len_max = len_a > len_b ? len_a : len_b;

int carry = 0;

for(int i = 0; i < len_max; i++)

if(carry != 0)

printf("1");

for(int i = len_max - 1; i >=0; i--)

printf("%d", s[i]);

printf("\n");

return 0;

}

2)大數減法

#include #include #define max 505 

int flag = 1;

int len_a, len_b;

void sub(int x, int y)

else

len = len_a;

for(i = 0; i < len; i++)

} i = len - 1;

while(x[i] == 0)

i--;

for(;i >= 0; i--)

printf("%d", x[i]);

}int main()

, b[max] = ;

scanf("%s %s", a, b);

len_a = strlen(a);

for(int i = 0; i <= len_a - 1; i++)

a[i] = a[len_a - 1 - i] - '0';

len_b = strlen(b);

for(int i = 0; i <= len_b - 1; i++)

b[i] = b[len_b - 1 - i] - '0';

if(len_a < len_b)

else if(len_a == len_b)

if(flag == 0)

sub(b, a);

else

printf("0");

} else

return 0;

}

3)大數乘法

#include#include#define max 505

int main()

, b[max] = , s[max * 2] = ;

int len_a, len_b, i, j;

scanf("%s %s", a, b);

if(strlen(a) < strlen(b))

len_a = strlen(a);

len_b = strlen(b);

for(i = 0; i < len_a; i++)

a[i] = a[len_a - i - 1] - '0';

for(i = 0; i < len_b; i++)

b[i] = b[len_b - i - 1] - '0';

for(i = 0; i < len_b; i++)

for(j = 0; j < len_a; j++)

s[i + j] += a[j] * b[i];

for(i = 0; i < 2 * len_a; i++)

if(s[i] >= 10)

i = 2 * len_a;

while(s[i] == 0)

i--;

if(i < 0)

printf("0");

else

return 0;

}

4)大數除法

#include#include#define max 505

char a[max], b[max];

int s[max] = , len_a, len_b;

void sub()

}int main()

i++; //商的位數,0是個位,1是十位,以此類推

if(len_a == len_b)

break;

for(j = len_b - 1; j >= 0; j--)

b[j + 1] = b[j];

b[0] = '0';

len_b++;

b[len_b] == '\0';//將減數最後添乙個0,相當於乘以10

} k = 0;

while(1)

for(; k < i; k++)

printf("%d", s[k]);

} return 0;

}

大數四則運算

include include includeusing namespace std define m 1000000000000000 大數加法 將數字以字串的形式傳入add加法函式,在函式內部完成字串 陣列的轉換,然後在陣列中逐位進行相加,再判斷該位相加後是否需要進製,為了方便計算,我們將數字的...

大數的四則運算

1.加法 輸入採用字元陣列儲存,然後將輸入存在整形陣列裡,然後逐位相加即可,同時注意進製處理。cpp view plain copy include include intmain b 555 c 555 scanf s m len m strlen m for i 0 i len m 1 i a ...

大數四則運算模板

該模板能傳任意數字進去計算結果 不管是小算大的還是大的算小的都能得到正確結果 除法那裡只精確到小數點後10位數。乘法用加法來模擬 除法用減法來模擬 下面的注釋很詳細。include include using namespace std void string a,string b void del...