判断给定数是否为2的幂。
**输入:**数字长度可以大于64,这意味着数字可以大于2 ^ 64(超出long long范围)(以字符串形式给出)
**输出:**如果数字是2的幂,则返回1,否则返回0
**示例:**输入:128输出:1
这是在一个编码平台上,BigInteger没有被导入,我不得不对字符串执行操作,要么不修改它的数据类型,要么使用数学公式来防止溢出。
class Solution {
public static int power(String A) {
/* write your solution here */
while(Integer.parseInt(A)>1){
if(Integer.parseInt(A)%2!=0)
return 0;
A=Integer.toString(Integer.parseInt(A)/2);
}
return 1;
//long num=Long.parseUnsignedLong(A);
//while(num>1){
// if(num%2!=0)
// return 0;
//num=num/2;
//}
// return 1; // The input can be upto 21 characters long, and that's why unsigned long didn't work.
}
}
我应该怎么做?(请只在java中)
3条答案
按热度按时间v2g6jxz61#
如果你把一个十进制数转换成二进制数,那么所有2的幂都以1开头,其余的都是0。
所以首先,你需要把字符串数字转换成二进制字符串,然后检查这个模式是否匹配(也许用一个循环)。如果你想找的话,你可以很容易地在网上找到第一部分。
kmynzznz2#
这个方法将给予String除以2的String表示。继续除以得到一个可管理的长度。
}
tzdcorbm3#
代码的工作:
1.我们从输入字符串中删除所有前导零,因为它们不影响数字是否为2的幂。
1.如果数字是零或者有一个以上的非零数字,它就不能是2的幂,所以我们返回0。
1.否则,我们检查最后一位数是否为奇数,如果是奇数,则该数字不可能是2的幂,因此返回0。
1.如果最后一位数是偶数,我们将数字除以2,直到它变成1或奇数。我们通过重复将数字的每一位数除以2,跟踪任何进位,并将结果附加到StringBuilder中。如果除法后剩余进位,则数字不是2的幂,我们返回0。
1.如果我们到达循环的末尾,数字是1,它是2的幂,所以我们返回1。
**注意:**此代码假定输入字符串表示非负整数。如果允许负数,则可能需要添加额外的检查以正确处理它们。