针对此问题,给定N,K和M
,找到最大的整数T
,使得N*(K^T) <= M
。其中N,K和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;
我一直看到,在溢出的情况下,变量的值变为负数。这总是发生,还是有时也会发生正值在溢出的情况下?