大數系列 高精度乘法

2022-10-11 06:57:10 字數 1624 閱讀 4952

the problem is to multiply two integers x, y. (0<=x,y<10250

)the input will consist of a set of pairs of lines. each line in pair contains one multiplyer.

for each input pair of lines the output line should consist one integer the product.

12122

222222222222222222222222

144

444444444444444444444444

本來是很水的一題的,速度寫出來後沒想到拖了這麼久老ac不了,怎麼修改都a不了。。。

本來的思路是這樣的:倒序輸入陣列裡面,然後再二重迴圈相乘,個位數累加給result的第i+j個數,其他位累加給i+j+1,雖然沒有和網上大部分做法一樣用到leap

來作為進製數,但結果據我測試多次效果是一樣的。

但不知道怎麼回事,老是wa。。。

注意到乘數為0時的情況,於是我判斷輸入的string第乙個字元是否為0,是就輸出0並進行下一輪,還是wa。

後來我考慮到如果遇到012*01這種情況,就沒有進行計算了,於是我吧判斷放在後面,判斷result是不是空的。。。還是wa了。。

我太失望了,我已經沒辦法了,難道非得用通用的那種方法嗎。。。

先貼出wa**吧。。。

#include#includeusing namespace std;

int main()

, b[250] = , res[300] = ;

for (int i = 0; i < (int)str1.size(); i++)

a[i] = str1[(int)str1.size() - i - 1] - '0';

for (int i = 0; i < (int)str2.size(); i++)

b[i] = str2[(int)str2.size() - i - 1] - '0';

for (int i = 0; i < (int)str1.size(); i++)

for (int j = 0; j < (int)str2.size(); j++)

int i;

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

if (res[i])

break;

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

cout << res[i];

cout << endl;

} return 0;

}

不知道到底是為什麼。。。

改用進製方法了。。。

然後就ac了。。。

#include #include int main()

if(leap)

}for(i = u - 1; i > 0; i--)

if(res[i])

break;

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

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

printf("\n");

}return 0;

}

c 高精度乘法(大數乘法)

對於計算機無法用普通資料型別 如 longint 表示的大整數進行乘法運算,稱為高精度乘法。高精度乘法主要包括以下幾個要求及過程 1 為了獲取輸入數字的每一位的值,包括個位,十位等,輸入整型的資料是無法滿足的,因此,輸入資料必須為字串形式。2 字串轉整型,儲存每一位值於陣列中 3 高精度乘法,重點!...

高精度演算法 大數乘法

由於相乘的兩個數答案很大超過了longlong或者unsigned longlong,就需要使用大數乘法。給定兩個正整數a和b,請你計算a b的值。輸入格式 共兩行,第一行包含整數a,第二行包含整數b。輸出格式 共一行,包含a b的值。資料範圍 1 a的長度 100000 1 b 10000 輸入樣...

大數相乘 高精度乘法

給定兩個數,相乘如何得到高精度的結果,給定的兩個數,不確定是不是浮點數,即可能乙個數帶多位小數,另乙個帶小數,或者兩個數都帶多位小數,或都不帶小數,針對這些情況,程式應該都要考慮,所謂的高精度其實就是看兩個數的小數字有多少,那麼其結果的小數字數應該為兩數小數字數之和。針對上述描述,其實大部分思路首先...