我期望看到的结果:例如 分区(603=1+2+8+16+64+512) 正如你所看到的,它是 2 的幂。我似乎无法弄清楚出了什么问题。
static String partition (int n){
int a=0;
if (n<=1)
return String.valueOf(n);
while ((int)Math.pow(2, a)<=n)
a++;
return partition(n-((int)Math.pow(2, a)))+
....."+"+ String.valueOf(Math.pow(2, a));
}
最佳答案
static String partition (int n)
{
int a=0;
if (n<=1)
return String.valueOf(n);
while ((int)Math.pow(2, a)<=n)
a++;
return partition(n-((int)Math.pow(2, a-1)))+
....."+"+ String.valueOf(Math.pow(2, a-1));
}
我已将返回部分的 a
更改为 a-1
。它会起作用,因为一旦 pow(2,a)
大于 n
,我们应该使用 a-1
而不是 a
as pow(2,a-1)
是小于 n
的 2 的最大幂
关于java - 递归对数以找到最接近另一个整数 x 的形式 = (2)^n 的最大整数 (n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42544920/