|
目前在研究一个数学问题,涉及到一个循环可能要执行上万亿次,所以要优化速度。循环中有个语句是求一个正整数的位数,正常来说将数字转成字符串求长度就可以了,但是在循环次数如此多的情况下,转成字符串再求的效率就非常低了。目前我使用的是如下方法(java):
static int len(long num) {
if (num < 10) return 1;
if (num < 100) return 2;
if (num < 1000) return 3;
if (num < 10000) return 4;
if (num < 100000) return 5;
if (num < 1000000) return 6;
if (num < 10000000) return 7;
if (num < 100000000) return 8;
if (num < 1000000000) return 9;
if (num < 10000000000L) return 10;
if (num < 100000000000L) return 11;
if (num < 1000000000000L) return 12;
if (num < 10000000000000L) return 13;
if (num < 100000000000000L) return 14;
if (num < 1000000000000000L) return 15;
if (num < 10000000000000000L) return 16;
if (num < 100000000000000000L) return 17;
if (num < 1000000000000000000L) return 18;
return 0;
}只是不知道还有没有更快的方式?另外,不知道比较大小的语句与其他语句(比如加减运算)的开销是否相同?毕竟上面的代码可能要执行的判断语句不少。 |
|