高精度計算

2022-06-07 04:48:09 字數 2226 閱讀 4915

利用計算機進行數值計算,有時會遇到這樣的問題:有些計算要求精度高,希望計算的數的位數可達幾十位甚至幾百位,雖然計算機的計算精度也算較高了,但因受到硬體的限制,往往達不到實際問題所要求的精度。我們可以利用程式設計的方法去實現這樣的高精度計算。介紹常用的幾種高精度計算的方法。

高精度計算中需要處理好以下幾個問題:

資料的接收和存貯:當輸入的數很長時,可採用字串方式輸入,這樣可輸入數字很長的數,利用字串函式和操作運算,將每一位數取出,存入陣列中。

void init(int a) //

傳入乙個陣列

另一種方法是直接用迴圈加陣列方法輸入資料。

void init(int

a) a[

0] =_size ;

for (int i = 1; i <= _size; i++)

}

位數的確定:接收時往往是用字串的,所以它的位數就等於字串的長度。

//

核心思想

c[i] = a[i] +b[i];

if (c[i] >= 10)//

核心演算法**

int c[100

];void add(int a, int b) //

a,b,c都為陣列,分別儲存被加數、加數、結果

}

【例1】高精度加法。輸入兩個正整數,求它們的和。

【分析】 輸入兩個數到兩個變數中,然後用賦值語句求它們的和,輸出。但是,我們知道,在c++語言中任何資料型別都有一定的表示範圍。而當兩個被加數很大時,上述演算法顯然不能求出精確解,因此我們需要尋求另外一種方法。在讀小學時,我們做加法都採用豎式方法,如圖1。 這樣,我們方便寫出兩個整數相加的演算法。

a3a2a1

+    b3b2b1

c4c3c2c1

#include #include 

#include

using

namespace

std;

intmain()

c[lenc] =x;

if (c[lenc] == 0

) lenc--; //

處理最高進製

for (i = lenc; i >= 1; i--)

cout

<< c[i]; //

輸出結果

cout

"pause");

return0;

}

if (a[i] c[i] = a[i] - b[i];

【例2】高精度減法。輸入兩個正整數,求它們的差。

#include #include 

#include

using

namespace

std;

intmain()

lena =strlen(n1);

lenb =strlen(n2);

for (i = 0; i <= lena - 1; i++)

a[lena - i] = int(n1[i] - '

0'); //

被減數放入a陣列

for (i = 0; i <= lenb - 1; i++)

b[lenb - i] = int(n2[i] - '

0'); //

減數放入b陣列

i = 1

;

while (i <= lena || i <=lenb)

c[i] = a[i] - b[i]; //

對應位相減

i++;

}lenc =i;

while ((c[lenc] == 0) && (lenc > 1

)) lenc--; //

最高位的0不輸出  

for (i = lenc; i >= 1; i--)

cout

<< c[i]; //

輸出結果

cout

"pause");

return0;

}

c[i + j - 1] = a[i] * b[j] + x + c[i + j - 1

];x = c[i + j - 1] / 10

;c[i + j - 1] %= 10;

商和餘數處理:視被除數和除數的位數情況進行處理

高精度計算

最近做了一些高精度計算問題,一般來說解題辦法都差不多,都是通過字串來操作的,下面是解題模板。清零操作 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...