我可以在循环中使用除法和模数,但对于非常大的整数来说这很慢。该数字存储在基数2中,可能大到2 ^ 8192。我只需要知道它是否是10的幂,所以我认为可能有一个快捷方式(除了使用查找表)。
答案 0 :(得分:8)
如果你的数字x是10的幂,那么
x = 10^y
表示某个整数y,表示
x = (2^y)(5^y)
因此,将整数向右移动直到不再有尾随零(应该是一个非常低成本的操作)并计算移位的位数(称为k)。现在检查剩余数量是否为5 ^ k。如果是,那么你的原始数字是10的幂。否则,它不是。由于2和5都是素数,因此总是有效。
答案 1 :(得分:0)
假设X
是您的输入值,我们从假设开始。
X = 10 ^ Something
其中Something
是Integer
。
所以我们说以下内容:
log10(X) = Something.
因此,如果X
强大10
,则Something
将为Integer
。
实施例
int x = 10000;
double test = Math.log10(x);
if(test == ((int)test))
System.out.println("Is a power of 10");