一些写算法题的小技巧记录(不定期更新,想到或者看到就整合进来)

1.遇到实在不会的题可以考虑打表找规律。

2.如果遇到疑似段错误(数组越界,野指针,堆栈溢出)的情况,可以使用exit()函数分割程序寻找错误点。

3.用计算机储存整数的方法找到某个数x的二进制表示的最低的1的的位置lowbit函数。

代码1:

int lowbit(int x)
{
    return x&(-x);
}

原理:

        负数一般用补码表示从而进行运算,补码的朴素求法就是对各位取反再加1,但在计算机组成原理中介绍了一种更高明的求负数补码做法:以最低位的1为基准(该位保持不变),左侧全部取反,右侧的0保持不变,所以and一下就可以只留下最低位1和所有后面的0表示的10进制数了,举个例子:14(1110)-14(0010)and后留下2(0010)。

代码2:

int lowbit(int x)
{
	return x-(x&(x-1));
}

原理:

        x&(x-1)用于消去最低位的1,然后x-x&(x-1)就相当于把最低位1右边的所有数全部减掉了,只留下最低位1和所有后边的0表示的十进制数了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值