zaf*_*zaf 11 javascript algorithm math
要查找输入的下一个奇数,请使用以下代码:
a=5.4; // Input
b=Math.ceil(a); // Required to turn input to whole number
b=b+(((b % 2)-1)*-1); // Gives 7
Run Code Online (Sandbox Code Playgroud)
细胞舍入功能是必需的.
这是安全的吗?有更紧凑的方法吗?
编辑:当输入已经是一个奇数整数时,没有任何反应.例如5.0将返回5
Poi*_*nty 14
怎么样
b += b % 2 ^ 1;
Run Code Online (Sandbox Code Playgroud)
除以2后的余数将始终为0或1,因此^运算符(异或)将其翻转到相反的位置.
(另外,(b & 1) ^ 1也可以.哦,我想b = b ^ 1这对正整数有用,但对于大整数来说会有问题.)
在提问者的要求下:
实现它的最紧凑的方法是
b = Math.ceil(a) | 1;
Run Code Online (Sandbox Code Playgroud)
首先使用ceil()获得不小于的最小整数a,然后获得不小于ceil(a)通过按位或小于1的最小奇数,以确保最后一位被设置而不改变任何其他内容.
要获得严格大于的最小奇数a,请使用
b = Math.floor(a+1) | 1;
Run Code Online (Sandbox Code Playgroud)
位操作符在Javascript中对带符号的32位整数进行操作,因此值a必须小于或等于,等等2^31-1.第二个严格小一些.此外,a必须大于-2^31-1.
如果有符号整数的表示不是两个补码,而是一个补码或符号和大小(我不知道Javascript是否允许,Java不是,但它在C中是可能的),值a必须是大于-1- Math.ceil(a)分别的结果.Math.floor(a+1)必须是非负的.