整数中的位数(大号)

时间:2016-04-09 07:00:07

标签: java

我有一个BigInteger的集合,我正在尝试获取每个整数的位数。为简洁起见,我们假设我们只处理数字。我们正在查看超过1000位的数字。

以下是我想到的方法。

  1. 字符串表示的长度(需要一堆内存)

  2. 模10方法(慢)

  3. 一个asanine想法(为了彻底而包括在内,因为这种方法的可扩展性不是很好)

    if (i >= 100000000) {
        i /= 100000000;
        n += 8;
    }
    if (i >= 10000) {
        i /= 10000;
        n += 4;
    }
    if (i >= 100) {
        i /= 100;
        n += 2;
    }
    if (i >= 10) {
        i /= 10;
        n += 1;
    }
    
  4. 对数(我觉得相当友好)(积分转到[this answer])

    int blex = val.bitLength() - 1022; // any value in 60..1023 is ok
    if (blex > 0)
        val = val.shiftRight(blex);
    double res = Math.log10(val.doubleValue());
    return blex > 0 ? res + blex * LOG2 : res;
    
  5. 这是我的想法,但想要测试编码前的有效性;说我有一些号码x。尝试使用(传统或单侧)二进制搜索的概念除以10的幂,并在0 < quotient < 10时停止。 power + 1应为数字位数。这将是一个对数解(?)。

  6. StackOverflow似乎没有什么可以用来计算任意数字中的位数。这个accepted answer表明了一种分区繁重的方法,可能会导致创建一堆新对象。我想知道是否可以有一个更光滑的解决方案。所以,我认为这篇文章将导致富有成效的讨论和思想的合作。请建议哪种方法最适合真正的大数字。

0 个答案:

没有答案