4 高精度計算

2021-10-19 10:19:16 字數 2864 閱讀 2055

由於c語言的資料型別能存放的數字大小有一定的限制。

如整型int表達範圍是(−231

-2^−2

31~2 31−

12^-1

231−1)

無符號整數unsigned long是(0~ 232−

12^-1

232−1)

浮點型double只能提供15~16位的有效數字。

因此,在計算位數超過十幾位的數時,不能採用現有的資料型別,只能自己程式設計計算。

高精度演算法(high accuracy algorithm)是處理大數字的數學計算方法。在一般的科學計算中,會經常算到小數點後幾百位或者更多,當然也可能是幾千億幾百億的大數字。一般這類數字我們統稱為高精度數,高精度演算法是用計算機對於超大資料的一種模擬加,減,乘,除,乘方,階乘,開方等運算。對於非常龐大的數字,我們將這個數字拆開,存放在乙個陣列裡作為乙個數字,這樣的數就被稱為是高精度數。高精度演算法就是能處理高精度數各種運算的演算法。

本文只簡單介紹最基本的高精度操作。

我們輸入的數字遠超long long等c語言基本資料型別的表示範圍,因此我們要把輸入的資料作為字元型別陣列讀取進我們的程式裡。

此外,為了方便進行計算(對齊個位、方便處理進製),我們還需要把讀取進來的陣列逆序放進乙個int陣列裡。相應的,輸出也應逆序。

**如下。

#include

#include

struct asdf

;char a[

1001];

void

change

(char

*a,asdf *a)

void

scan

(asdf *a)

void

print

(asdf a)

intmain()

用豎式計算7685+3419。

#include

#include

struct asdf

;char a[

1001];

void

change

(char

*a,asdf *a)

void

scan

(asdf *a)

void

print

(asdf a)

asdf plus

(asdf a,asdf b)

intmain()

用豎式計算7685-3419。

#include

#include

struct asdf

;char a[

1001];

void

change

(char

*a,asdf *a)

void

scan

(asdf *a)

void

print

(asdf a)

intcompare

(asdf a,asdf b)

asdf minus

(asdf a,asdf b)

ans.n=

(a.n>b.n?a.n:b.n)

;//和的長度不大於被減數的長度

for(

int i=

1;i<=ans.n;

++i) ans.x[i]

=a.x[i]

-b.x[i]

;for

(int i=

1;i++i)

//處理借位

if(ans.x[i]

<

0) ans.x[i]+=

10,ans.x[i+1]

--;while

(ans.x[ans.n]==0

&&ans.n>

1) ans.n--

;//去前導零

return ans;

}int

main()

不使用豎式,計算128712*2。

#include

#include

struct asdf

;char a[

1001];

void

change

(char

*a,asdf *a)

void

scan

(asdf *a)

void

print

(asdf a)

asdf times

(asdf a,

int b)

while

(x) ans.x[

++ans.n]

=x%10

,x/=10;

return ans;

}int

main()

用豎式計算542*768。

高精度計算

最近做了一些高精度計算問題,一般來說解題辦法都差不多,都是通過字串來操作的,下面是解題模板。清零操作 string clearstr string s if s return s 0 while s.length 0 s 0 0 s.erase 0,1 刪除第乙個零 if s return s 0 ...

高精度計算

include include includeusing namespace std const int l 110 string add string a,string b 只限兩個非負整數相加 nb l int la a.size lb b.size for int i 0 ilb la lb ...

高精度計算

一.高精度儲存 1.如對數採用的字串輸入 include include using namespace std const int n 100 最多100位 int main 2.直接讀入 include using namespace std const int n 100 最多100位 int...