Java 制作基本算法
因此,基本上我想找到一种更简单的方法:Java 制作基本算法,java,Java,因此,基本上我想找到一种更简单的方法: if(size == 2 || size == 6 || size == 10 || size == 14 || ...) unit /= 2; 所以基本上它从2开始,然后检查是否等于之前的大小+4 我需要增加到256 我想知道是否有一个简单的方法可以做到这一点 编辑:很抱歉,我的意思是在一行中完成所有操作,而不是在多行中完成。如果它一直升高4,您可以尝试使用模块4: if ((size - 2) % 4 == 0 && size &l
if(size == 2 || size == 6 || size == 10 || size == 14 || ...) unit /= 2;
所以基本上它从2开始,然后检查是否等于之前的大小+4
我需要增加到256
我想知道是否有一个简单的方法可以做到这一点
编辑:很抱歉,我的意思是在一行中完成所有操作,而不是在多行中完成。如果它一直升高4,您可以尝试使用模块4:
if ((size - 2) % 4 == 0 && size <= 256){
unit /= 2;
}
你可以在O1中用
if ((size - 2) % 4 == 0){
/*2, 6, 10 etc*/
unit >>= (Math.min(size, 256) + 2) / 4;
}
其中,按位移位生成二次幂的适当乘法:这是您了解运算符先例的试金石
现在问题已经更新,单元上的操作是相当单调的单元/=2,您必须添加新引入的256大小上限。您可以使用如下switch语句来完成:
switch(size) {
case 2:
unit /=2;
case 4:
unit /= 2;
....
}
但这仍然很麻烦。另一种选择是:
for(int i=2; i < 256; i+=4) {
if (size == i) {
unit /= 4;
}
}
我会使用一个可能的除数数组 如果要除以的数字发生变化,则将其扩展到类中 如果存在某种数学级数,如d[n+1]=d[n]+4,则可快速推导除数 您可以这样做:
if ( size >= 2 && size <= 256 && size % 4 == 2 )
unit /= 2;
一种神秘的方式:
unit >>= ((size & -253) == 2) ? 1 : 0;
说明:
2-254范围内的数字也在0-255范围内。您可以使用~255=0xffffff00进行位AND运算;如果该值不为零,则该值超出该范围;
若要检查并计算数字%4,请对3进行位AND运算;将其与2进行比较,以查看数字%4是否=2。
因此,为了检查一个数字是否满足这两个条件,我们可以使用上面两个位掩码的按位AND计算大小的按位AND:如果两个条件都满足,结果是2
因此:
(size & (~255 | 3)) == 2 (simplifies to) (size & -253) == 2.
为了确认,它对于大小==3是不变的,例如?@Bathsheba是的,它是不变的,只是为了确保我至少对这个例子理解正确:如果大小是2,那么你想将单位3除以2^3->除以8,如果大小是6,那么将单位2除以4,再除以10,再除以一次2?它总是除以2。唯一需要更改的是,它检查大小是否等于先前的+4。因此,如果size==14,下一行将加上。它总是被2分开。我投票决定把这个问题作为离题题来结束,因为不断变化的问题是不可能回答的。分开还是左移?此外,如果大小为2,单位除以2的次数要多得多…@AndyTurner:我们将联合发布。我认为您需要更像258大小/4大小的东西,对于大小2,您应该减半64倍;对于254号,您应该只使用一次。它可以充分恢复2、6和10个案例;也许OP可以证实?真遗憾:-这个答案太漂亮了。大小一直在增加,直到256。它不会在10点停止。@ShawnSmith-固定数量4?每次?如果是这样,您需要uniknow的第二部分。很抱歉,我看错了问题,问题已更新。@OldCurmudgeon已更正,谢谢。忘记了0%N=0。很抱歉,我看错了问题,问题已更新。@ShawnSmith更新了问题后,我的代码应该可以工作。几乎,它会上升到256,所以您需要一个大小不太大的-&您也需要检查范围。很抱歉,我看错了问题,问题已更新。
unit >>= ((size & -253) == 2) ? 1 : 0;
(size & (~255 | 3)) == 2 (simplifies to) (size & -253) == 2.