我知道这是基本计算,但我有点生疏,我想确定我做得对。
我正在我的网站上实施用户级系统,我需要在他们的个人资料中显示每个用户的级别。他们已经有了一些要点,我想从中计算出他们的等级。
我希望将等级提高3倍,而第一等级只有1点。
所以,我会按照以下步骤进行:
level = 0;
factor = 3;
points = 243; //as an example, this would be level 6.
while (points >= 1) {
points = points/factor;
level++;
}
你会建议我做什么?这是最好的方法吗?有更有效的方法吗?我正在寻找性能和可扩展性。
答案 0 :(得分:1)
最简单的方法是在您的语言中使用等效的ceiling(log base 3 of (points + 0.5))
。
+0.5
此处修复了可能的浮点错误,并允许使用0
作为点。
例如在Python中:
import math
def levels(points):
return math.ceil(math.log(points + 0.5, 3))
在C / C ++中:
#include "math.h"
int levels(int points) {
return 1 + (int)(log(points + 0.5) / log(3.0));
}
等等。
如果这种方法对你的目标语言的影响太慢,那么就按照你提出的建议:循环中的划分。