大數運算

由於程式語言提供的基本數值數據類型表示的數值範圍有限,不能滿足較大規模的高精度數值計算,因此需要利用其他方法實現高精度數值的計算,於是產生了大數運算。大數運算主要有加、減、乘三種方法。

簡介

大數運算,顧名思義,就是很大的數值的數進行一系列的運算。

我們知道,在數學中,數值的大小是沒有上限的,但是在計算機中,由於字長的限制,計算機所能表示的範圍是有限的,當我們對比較小的數進行運算時,如:1234+5678,這樣的數值並沒有超出計算機的表示範圍,所以可以運算。但是當我們在實際的套用中進行大量的數據處理時,會發現參與運算的數往往超過計算機的基本數據類型的表示範圍,比如說,在天文學上,如果一個星球距離我們為100萬光年,那么我們將其化簡為公里,或者是米的時候,我們會發現這是一個很大的數。這樣計算機將無法對其進行直接計算。

可能我們認為實際套用中的大數也不過就是幾百位而已,實際上,在某些領域裡,甚至可能出現幾百萬位的數據進行運算,這是我們很難想像的。如果沒有計算機,那么計算效率可想而知。

既然在計算機中無法直接表示,那么大數到底如何進行運算呢,學習過數據結構的都知道線性表,將大數拆分然後存儲線上性表中,不失為一個很好的辦法。

大數除法,可以類比人類手算,添位比較取商,中間結果與除數相減所得到的差參與下一輪運算,直到結束。這裡需要注意添位時,商有時需要補零,而且除法運算需要使用加、減、乘、比較運算。

原理

利用數組連續性,將大數每一位上的數字單獨取出放入對應的數組格中,然後再對每一位做單獨的加減乘運算。形象的說,類似於國小學習加減乘所列的式子。

套用

HDUOJ——1002 A + B Problem II

Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 69615Accepted Submission(s): 12678

Problem Description

I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.

Input

The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.

Output

For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.

Sample Input

2

1 2

112233445566778899 998877665544332211

Sample Output

Case 1:

1 + 2 = 3

Case 2:

112233445566778899 + 998877665544332211 = 1111111111111111110

Author

Ignatius.L

HDUOJ 1002 代碼

相關詞條

熱門詞條

聯絡我們