// Here A is the number to check which is a string
int power0ftwo(string A) {
int i, m, n, num=0;
n =A.size();
for(i=0;i<n;i++)
{
num = num*10 + (A[i]- '0');
if(num>INT_MAX)
return 0;
}
m = num;
if(num==1){
return 0;
}
m = (!(num&(num-1)));
return m;
}
[如果A<=INT_MAX
的num
值为A
,但是对于A>INT_MAX
的不同值,执行for循环后对于num
的A
值是不同的。
对于A<=INT_MAX
,例如num=A=16=10000
,(num-1)=(A-1)=15=01111
---> m=(!(num&(num-1)))=1
。
但是如果有溢出num
是不可预测的。
所以我的问题是,对于给出可以表示为2的幂的数字,代码给出正确的输出1,而在发生溢出的情况下(例如,输入为(2^(63))
),对于其他数字给出正确的输出1,逻辑是什么?或(2^(63)-10)
。
也许您应该使用另一个可以存储所有数字(数组,向量,列表等)的数据结构来表示该数字。然后,实现将数字除以2位数的功能。为了进行进位,您还需要验证要除以的数字是奇数还是零。这可以更好地解释它。 Given a huge integer number as a string, check if its a power of 2