给定一个整数,打印其二进制表示中具有相同数量的 1 位的下一个最小和下一个最大数字
数完数字中1的个数后,如何确定下一个最小的数字?
对于下一个高度,您可以使用 Hakmem 175 :
第 175 项(高斯珀):
要获取具有相同数量 1 位的下一个更高的数字:
unsigned nexthi_same_count_ones(unsigned a) {
/* works for any word length */
unsigned c = (a & -a);
unsigned r = a+c;
return (((r ^ a) >> 2) / c) | r;
}
对于下一个较低的算法,我不知道快速算法,所以我会使用经典方法,如果数字 > 则 2^0+2^1+...2^n 然后从你的数字中减一并计算位数。第一个 n 位数字是 1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)