,我們乘陣列A
的所有元素,讓這個值稱爲MulA
,與之相似我們爲B
調用這個值MulB
做。我有一個數組<code>A</code>和<code>B</code>比較乘法
現在,我們要比較這些值哪一個是更大的,我們能做的實際上不相乘的元素,因爲價值是爲了10^10
和array length
是高達10^6
我們不能存儲我們的結果呢?
,我們乘陣列A
的所有元素,讓這個值稱爲MulA
,與之相似我們爲B
調用這個值MulB
做。我有一個數組<code>A</code>和<code>B</code>比較乘法
現在,我們要比較這些值哪一個是更大的,我們能做的實際上不相乘的元素,因爲價值是爲了10^10
和array length
是高達10^6
我們不能存儲我們的結果呢?
爲避免大型產品,您可以比較日誌總和:sum(log a for a in A)
至sum(log b for b in B)
。這是因爲(a1*a2*a3*...*an) = exp(log(a1)+log(a2)+...+log(an))
和exp
是一個增加功能。
這會引入一些數字錯誤(因爲log
不是完全可計算的),但它在實踐中將工作得很好,除非產品彼此非常接近。
請注意,這既適用於產品很大時,也適用於產品很小時(例如,如果元素是可能性)。
使用64位整數(在C++中爲long long
),它可以容納高達9 x 10^18
(2^63-1)。不,沒有辦法比較兩個列表乘法而不乘以它們(模乘法運算規則在這裏不起作用)。
因爲值是階10^10和陣列長度爲高達10^6我們不能 商店我們的結果?
在最壞的情況下,乘以的值將是10 ^(10^7),它不適合任何數據類型。所以你需要在這裏使用Big Integer,它將所有內容都以字符串形式引入。
如果您需要一個簡單的C++大整數實現,我可以提供一個。謝謝。
我更新了我的答案。順便說一下,檢查OP的配置文件,發現他是一個C++風扇:P –
請參閱我的更新問題 –
@NarendraModi檢查更新請 –
爲什麼不使用'int64_t'?最大值爲9 223 372 036 854 775 807,大於9×10 19。 – hidefromkgb
你還沒有提到重要的東西 - 什麼是元素類型? – MBo