它試圖解決這個問題,給出N,K amd M
,找到最大整數T
,例如N*(K^T) <= M
。 N,K and M
可以是10^18
的值。所以long long
就足夠了。 我嘗試了用迭代來解決對T變量的值在溢出的情況下始終爲負
int T = 0;
long long Kpow = 1;
while(1)
{
long long prod = N*Kpow;
if(prod > M)
break;
T++;
Kpow = Kpow*K;
}
但由於N*Kpow
可以走出去的long long
範圍,有必要使用一些大的整數來處理產品。但是,我發現了一些其他的代碼,巧妙地處理這種情況,
long long prod = N*Kpow;
if(prod < 0)
break;
即使我一直認爲,在溢出,變量的值變爲負。在溢出情況下,情況總是如此,有時甚至是正值?
「如果表達式的評估過程中,其結果是不數學定義或不是在其類型 表示的值的範圍,該行爲是未定義」。 – PlasmaHH