给定一个非负数n和两个值l和r 。问题是检查在n的二进制表示形式中的l到r范围内,所有位是否都未设置。
约束:1 <= l <= r <= n的二进制表示形式的位数。
例子:
Input : n = 17, l = 2, r = 4
Output : Yes
(17)10 = (10001)2
The bits in the range 2 to 4 are all unset.
Input : n = 36, l = 3, r = 5
Output : No
(36)10 = (100100)2
The bits in the range 3 to 5 are all not unset.
方法:以下是步骤:
- 计算num =(((1 << r)– 1)^((1 <<(l-1))– 1)。这将产生一个具有r个位数的数字num,并且范围l到r的位是唯一的设置位。
- 计算new_num = n&num。
- 如果new_num == 0,则返回“是”(在给定范围内所有位均未设置)。
- 否则返回“ No”(在给定范围内所有位均未设置)。
C++
// C++ implementation to check whether all
// the bits are unset in the given range
// or not
#include
using namespace std;
// function to check whether all the bits
// are unset in the given range or not
string allBitsSetInTheGivenRange(unsigned int n,
unsigned int l,
unsigned int r)
{
// calculating a number 'num' having 'r'
// number of bits and bits in the range l
// to r are the only set bits
int num = ((1 << r) - 1) ^
((1 << (l - 1)) - 1);
// new number which will only have
// one or more set bits in the range
// l to r and nowhere else
int new_num = n & num;
// if new num is 0, then all bits
// are unset in the given range
if (new_num == 0)
return "Yes";
// else all bits are not unset
return "No";
}
// Driver program to test above
int main()
{
unsigned int n = 17;
unsigned int l = 2, r = 4;
cout << allBitsSetInTheGivenRange(n, l, r);
return 0;
}
Java
// Java implementation to
// check whether all the
// bits are unset in the
// given range or not
import java.io.*;
class GFG
{
// function to check whether
// all the bits are unset in
// the given range or not
static String allBitsSetInTheGivenRange(int n,
int l,
int r)
{
// calculating a number 'num'
// having 'r' number of bits
// and bits in the range l to
// r are the only set bits
int num = ((1 << r) - 1) ^
((1 << (l - 1)) - 1);
// new number which will
// only have one or more
// set bits in the range
// l to r and nowhere else
int new_num = n & num;
// if new num is 0, then
// all bits are unset in
// the given range
if(new_num == 0)
return "Yes";
// else all bits
// are not unset
return "No";
}
// Driver Code
public static void main (String[] args)
{
int n = 17;
int l = 2;
int r = 4;
System.out.println(
allBitsSetInTheGivenRange(n, l, r));
}
}
// This code is contributed by akt_mit
Python 3
# Python 3 implementation to check whether
# all the bits are unset in the given range
# or not
# function to check whether all the bits
# are unset in the given range or not
def allBitsSetInTheGivenRange(n, l, r):
# calculating a number 'num' having 'r'
# number of bits and bits in the range l
# to r are the only set bits
num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1)
# new number which will only have
# one or more set bits in the
# range l to r and nowhere else
new_num = n & num
# if new num is 0, then all bits
# are unset in the given range
if (new_num == 0):
return "Yes"
# else all bits are not unset
return "No"
# Driver Code
if __name__ == "__main__":
n = 17
l = 2
r = 4
print(allBitsSetInTheGivenRange(n, l, r))
# This code is contributed by ita_c
C#
// C# implementation to
// check whether all the
// bits are unset in the
// given range or not
using System;
public class GFG{
// function to check whether
// all the bits are unset in
// the given range or not
static String allBitsSetInTheGivenRange(int n,
int l,
int r)
{
// calculating a number 'num'
// having 'r' number of bits
// and bits in the range l to
// r are the only set bits
int num = ((1 << r) - 1) ^
((1 << (l - 1)) - 1);
// new number which will
// only have one or more
// set bits in the range
// l to r and nowhere else
int new_num = n & num;
// if new num is 0, then
// all bits are unset in
// the given range
if(new_num == 0)
return "Yes";
// else all bits
// are not unset
return "No";
}
// Driver Code
static public void Main (){
int n = 17;
int l = 2;
int r = 4;
Console.WriteLine(
allBitsSetInTheGivenRange(n, l, r));
}
}
// This code is contributed by k_mit
PHP
Javascript
输出:
Yes