我已經給了一個日誌值Y
,我要計算Y的抗日誌即找到摩多值
ans = (Math.pow(10,Y))%mod
其中mod = 1e9+7
和Y的抗日誌將永遠是整數,即
Y是計算爲按照Y= log(a) a is very large integer of range 10^100000
因此,對於給定的Y我需要計算ans?考慮到mod操作,該怎麼做。
我的做法
double D = Y -(int)Y
long Pow = (long)Y
for(int i=1;i<=Pow;i++) ans = (ans*10)%mod;
ans = (ans*Math.pow(10,D))%mod
但它不是正確的有人可以在這裏建議是有效的方法? BigDecimal在那裏很有用?
例如:
Y = 16.222122660468525
使用簡單的方法,並四捨五入即Math.log(10,Y)
給我1667718169966651
但使用循環它給我16677181699666510
。我現在不使用mod,只是解釋有錯誤。
這裏Y
小,所以直接的方法工作,我們可以輕鬆地採取mod。如果Y的範圍是10000,它將不會工作並溢出,所以我們必須使用mod。
爲了確認,這裏的日誌是'log(a)'或'log10(a)'?爲什麼'Math.pow(Math.E,(Math.log(a)))'找不到反對數? – nullpointer
@nullpointer它的基數爲10 – Regression
然後'Math.pow(10,(Math.log(a)))''有什麼問題? – nullpointer