【发布时间】:2011-08-01 11:52:40
【问题描述】:
我想取一个 1 到 17 位的数字,然后通过一系列逻辑循环来改变数字的各个数字。我需要能够做到以下几点:
1) 一种快速了解数字中有多少位的方法。有没有一个好的(有效的)php 方法来做到这一点?以 10 为基数是最好的方法吗?或者也许把它变成一个字符串并询问长度?
2) 接下来,我需要知道每个数字中的数字。我是否应该继续对数字执行 % 10 以解析每个数字(这样做也有助于通过在循环中添加计数来解决问题 1)?
3) 最后,我需要一个好方法来更改数字的各个数字。我应该使用正则表达式吗?还是我应该通过将各种数字加在一起来建立一个新数字,每个数字代表一个数字(例如 1 + 30 + 400 + 2000 + 6000 = 62431)?我想我也可以使用与上一个示例相同的方法来调整原始数字,方法是添加/减去原始数字,将每个数字调整为我想要的数字。
如果您觉得其他方法更快,请告诉我解决我的问题的其他方法。效率是关键。
【问题讨论】:
-
既然您已经对 1 和 2 有了一些想法,为什么不自己尝试对它们进行基准测试呢?
-
我实际上并不擅长基准测试(基本上不知道)。 php中有什么好的工具可以做到这一点吗?或者我应该在一百万次循环之后输出时间戳?感谢您的帮助。
-
查看我的帖子以获取简单的基准测试示例。我已经检查了数字长度方法。使用 common log 比 string cast 和 substr 快 3 倍。
-
如果你想让它完全可靠,你需要使用字符串。
-
要获得整数
i的长度,一种快速的方法(在C语言中)是:n=1; if(i>=100000000){n+=8;i/=100000000;} if(i>=10000){n+=4;i/=10000;} if(i>=100){n+=2;i/=100} if(i>=10){n+=1;}
标签: performance math numbers