0

我确定我以前在学校有过这个,但我不记得这个东西叫什么了。

我有任意数字,我需要知道我可以将它乘以 0.9(或任何其他值 0-1)多少次,直到原始数字剩下的 x 小于 x。

在循环格式中,它看起来像:

num = 4654;
mult = 0.9;
limit = 140;
count = 0;
while(num >= limit){
    num *= mult;
    count++;
}

但这甚至可以在没有循环的情况下完成吗?有对数的东西?

4

2 回答 2

6

注意

num * (0.9)^k <= limit

是您希望对某个整数满足的不等式k,并且您寻求最小的这样k。然后

(0.9)^k <= limit / num

k * log(0.9) <= log(limit / num)

以便

k >= log(limit / num) / log(0.9)

不等式反转的地方,因为log(0.9) < 0. k因此,取大于的最小整数log(limit / num) / log(0.9)

所以,取 的上限log(limit / num) / log(0.9)

当然,这可以通过替换0.9rwhere ris your multiplier from 来概括(0, 1)

于 2011-03-09T20:47:40.243 回答
1

计数 = log(limit / num) / log(mult)

于 2011-03-09T20:47:05.820 回答