检查数字是否为2 [保留]的幂

问题描述 投票:-1回答:1
// 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_MAXnum值为A,但是对于A>INT_MAX的不同值,执行for循环后对于numA值是不同的。

对于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)

c++ string integer-overflow
1个回答
0
投票

也许您应该使用另一个可以存储所有数字(数组,向量,列表等)的数据结构来表示该数字。然后,实现将数字除以2位数的功能。为了进行进位,您还需要验证要除以的数字是奇数还是零。这可以更好地解释它。 Given a huge integer number as a string, check if its a power of 2

© www.soinside.com 2019 - 2024. All rights reserved.