使用二进制方式验证,由于3的二进制位00000011,所以假设b=3*a;
那么b的二进制的最低位即为a的最低位,a的次低位加上最低位即为b的次低位,依次类推,
1 1 0 0
1 1
1 1 0 0
1 1 0 0
1 0 0 1 0 0
代码如下:
bool IsTimesOf3(int data, int* result){
int num = data < 0 ? -data : data;
int lastBit = 0;
int times = 0;
while(num > 0){ //若结果大于零则一直进行运算,3倍数最终会等于0,不是3倍数最终会小于0
lastBit = num & 1;
num = (num >> 1) - lastBit;
*result |= (lastBit << times);
times++;
}
if (num != 0)
{
*result = 0;
}
return num == 0 ? true : false;
}