找到唯一设定位的位置
给定一个二进制表示中只有一个“1”和所有其他“0”的数字 N,找到唯一设置位的位置。如果有 0 个或 1 个以上的设置位,答案应该是-1。在数字的二进制表示中,设置位“1”的位置应从 1 开始计数。
来源:微软访谈| 18
示例:-
Input:
N = 2
Output:
2
Explanation:
2 is represented as "10" in Binary.
As we see there's only one set bit
and it's in Position 2 and thus the
Output 2.
这是另一个例子
Input:
N = 5
Output:
-1
Explanation:
5 is represented as "101" in Binary.
As we see there's two set bits
and thus the Output -1.
其思想是从最右边的位开始,逐个检查每一位的值。下面是详细的算法。 (1)如果数是二的幂,那么只有它的二进制表示只包含一个‘1’。这就是为什么要检查给定的数字是否是 2 的幂。如果给定的数字不是 2 的幂,则打印错误信息并退出。 2) 初始化两个变量;i = 1(用于循环)和 pos = 1(用于查找设置位的位置) 3) 在循环内部,对 I 和数字“N”进行按位“与”。如果该操作的值为真,则设置“pos”位,因此中断循环并返回位置。否则,将“位置”增加 1,将左移位 I 增加 1,并重复该过程。
C++
// C++ program to find position of only set bit in a given number
#include <bits/stdc++.h>
using namespace std;
// A utility function to check whether n is a power of 2 or not.
// See http://goo.gl/17Arj
int isPowerOfTwo(unsigned n)
{
return n && (!(n & (n - 1)));
}
// Returns position of the only set bit in 'n'
int findPosition(unsigned n)
{
if (!isPowerOfTwo(n))
return -1;
unsigned i = 1, pos = 1;
// Iterate through bits of n till we find a set bit
// i&n will be non-zero only when 'i' and 'n' have a set bit
// at same position
while (!(i & n)) {
// Unset current bit and set the next bit in 'i'
i = i << 1;
// increment position
++pos;
}
return pos;
}
// Driver program to test above function
int main(void)
{
int n = 16;
int pos = findPosition(n);
(pos == -1) ? cout << "n = " << n << ", Invalid number" << endl : cout << "n = " << n << ", Position " << pos << endl;
n = 12;
pos = findPosition(n);
(pos == -1) ? cout << "n = " << n << ", Invalid number" << endl : cout << "n = " << n << ", Position " << pos << endl;
n = 128;
pos = findPosition(n);
(pos == -1) ? cout << "n = " << n << ", Invalid number" << endl : cout << "n = " << n << ", Position " << pos << endl;
return 0;
}
// This code is contributed by rathbhupendra
C
// C program to find position of only set bit in a given number
#include <stdio.h>
// A utility function to check whether n is a power of 2 or not.
// See http://goo.gl/17Arj
int isPowerOfTwo(unsigned n)
{
return n && (!(n & (n - 1)));
}
// Returns position of the only set bit in 'n'
int findPosition(unsigned n)
{
if (!isPowerOfTwo(n))
return -1;
unsigned i = 1, pos = 1;
// Iterate through bits of n till we find a set bit
// i&n will be non-zero only when 'i' and 'n' have a set bit
// at same position
while (!(i & n)) {
// Unset current bit and set the next bit in 'i'
i = i << 1;
// increment position
++pos;
}
return pos;
}
// Driver program to test above function
int main(void)
{
int n = 16;
int pos = findPosition(n);
(pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);
n = 12;
pos = findPosition(n);
(pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);
n = 128;
pos = findPosition(n);
(pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);
return 0;
}
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to find position of only set bit in a given number
class GFG {
// A utility function to check whether n is a power of 2 or not.
// See http://goo.gl/17Arj
static boolean isPowerOfTwo(int n)
{
return (n > 0 && ((n & (n - 1)) == 0)) ? true : false;
}
// Returns position of the only set bit in 'n'
static int findPosition(int n)
{
if (!isPowerOfTwo(n))
return -1;
int i = 1, pos = 1;
// Iterate through bits of n till we find a set bit
// i&n will be non-zero only when 'i' and 'n' have a set bit
// at same position
while ((i & n) == 0) {
// Unset current bit and set the next bit in 'i'
i = i << 1;
// increment position
++pos;
}
return pos;
}
// Driver code
public static void main(String[] args)
{
int n = 16;
int pos = findPosition(n);
if (pos == -1)
System.out.println("n = " + n + ", Invalid number");
else
System.out.println("n = " + n + ", Position " + pos);
n = 12;
pos = findPosition(n);
if (pos == -1)
System.out.println("n = " + n + ", Invalid number");
else
System.out.println("n = " + n + ", Position " + pos);
n = 128;
pos = findPosition(n);
if (pos == -1)
System.out.println("n = " + n + ", Invalid number");
else
System.out.println("n = " + n + ", Position " + pos);
}
}
// This code is contributed by mits
Python 3
# Python3 program to find position of
# only set bit in a given number
# A utility function to check
# whether n is power of 2 or
# not.
def isPowerOfTwo(n):
return (True if(n > 0 and
((n & (n - 1)) > 0))
else False);
# Returns position of the
# only set bit in 'n'
def findPosition(n):
if (isPowerOfTwo(n) == True):
return -1;
i = 1;
pos = 1;
# Iterate through bits of n
# till we find a set bit i&n
# will be non-zero only when
# 'i' and 'n' have a set bit
# at same position
while ((i & n) == 0):
# Unset current bit and
# set the next bit in 'i'
i = i << 1;
# increment position
pos += 1;
return pos;
# Driver Code
n = 16;
pos = findPosition(n);
if (pos == -1):
print("n =", n, ", Invalid number");
else:
print("n =", n, ", Position ", pos);
n = 12;
pos = findPosition(n);
if (pos == -1):
print("n =", n, ", Invalid number");
else:
print("n =", n, ", Position ", pos);
n = 128;
pos = findPosition(n);
if (pos == -1):
print("n =", n, ", Invalid number");
else:
print("n =", n, ", Position ", pos);
# This code is contributed by mits
C
// C# program to find position of only set bit in a given number
using System;
class GFG {
// A utility function to check whether n is a power of 2 or not.
// See http://goo.gl/17Arj
static bool isPowerOfTwo(int n)
{
return (n > 0 && ((n & (n - 1)) == 0)) ? true : false;
}
// Returns position of the only set bit in 'n'
static int findPosition(int n)
{
if (!isPowerOfTwo(n))
return -1;
int i = 1, pos = 1;
// Iterate through bits of n till we find a set bit
// i&n will be non-zero only when 'i' and 'n' have a set bit
// at same position
while ((i & n) == 0) {
// Unset current bit and set the next bit in 'i'
i = i << 1;
// increment position
++pos;
}
return pos;
}
// Driver code
static void Main()
{
int n = 16;
int pos = findPosition(n);
if (pos == -1)
Console.WriteLine("n = " + n + ", Invalid number");
else
Console.WriteLine("n = " + n + ", Position " + pos);
n = 12;
pos = findPosition(n);
if (pos == -1)
Console.WriteLine("n = " + n + ", Invalid number");
else
Console.WriteLine("n = " + n + ", Position " + pos);
n = 128;
pos = findPosition(n);
if (pos == -1)
Console.WriteLine("n = " + n + ", Invalid number");
else
Console.WriteLine("n = " + n + ", Position " + pos);
}
}
// This code is contributed by mits
服务器端编程语言(Professional Hypertext Preprocessor 的缩写)
<?php
// PHP program to find position of
// only set bit in a given number
// A utility function to check
// whether n is power of 2 or
// not. See http://goo.gl/17Arj
function isPowerOfTwo($n)
{
return $n && (!($n & ($n - 1)));
}
// Returns position of the
// only set bit in 'n'
function findPosition($n)
{
if (!isPowerOfTwo($n))
return -1;
$i = 1;
$pos = 1;
// Iterate through bits of n
// till we find a set bit i&n
// will be non-zero only when
// 'i' and 'n' have a set bit
// at same position
while (!($i & $n))
{
// Unset current bit and
// set the next bit in 'i'
$i = $i << 1;
// increment position
++$pos;
}
return $pos;
}
// Driver Code
$n = 16;
$pos = findPosition($n);
if (($pos == -1) == true)
echo "n =", $n, ", ",
" Invalid number", "\n";
else
echo "n = ", $n, ", ",
" Position ", $pos, "\n";
$n = 12;
$pos = findPosition($n);
if(($pos == -1) == true)
echo "n = ", $n, ", ",
" Invalid number", "\n";
else
echo "n =", $n, ", ",
" Position ", $pos, "\n";
$n = 128;
$pos = findPosition($n);
if(($pos == -1) == true)
echo "n =", $n, ", ",
" Invalid number", "\n";
else
echo "n = ", $n, ", ",
" Position ", $pos, "\n";
// This code is contributed by ajit
?>
java 描述语言
<script>
// JavaScript program to find position of
// only set bit in a given number
// A utility function to check
// whether n is power of 2 or
// not.
function isPowerOfTwo(n){
return (n > 0 && ((n & (n - 1)) == 0)) ? true : false;
}
// Returns position of the
// only set bit in 'n'
function findPosition(n){
if (isPowerOfTwo(n) == false)
return -1;
var i = 1;
var pos = 1;
// Iterate through bits of n
// till we find a set bit i&n
// will be non-zero only when
// 'i' and 'n' have a set bit
// at same position
while ((i & n) == 0){
// Unset current bit and
// set the next bit in 'i'
i = i << 1;
// increment position
pos += 1;
}
return pos;
}
// Driver Code
var n = 16;
var pos = findPosition(n);
if (pos == -1)
document.write("n =" + n + ", Invalid number");
else
document.write("n =" + n + ", Position " + pos);
document.write("<br>");
n = 12;
pos = findPosition(n);
if (pos == -1)
document.write("n =" + n + ", Invalid number");
else
document.write("n =" + n + ", Position ", pos);
document.write("<br>");
n = 128;
pos = findPosition(n);
if (pos == -1)
document.write("n =" + n + ", Invalid number");
else
document.write("n =" + n + ", Position " + pos);
// This code is contributed by AnkThon
</script>
输出:
n = 16, Position 5
n = 12, Invalid number
n = 128, Position 8
下面是针对这个问题的另一种方法。其思想是将给定数字“n”的设置位一个接一个地右移,直到“n”变成 0。数一下我们移动了多少次,使 n 为零。最终计数是置位位的位置。
C++
// C++ program to find position of only set bit in a given number
#include <bits/stdc++.h>
using namespace std;
// A utility function to check whether n is power of 2 or not
int isPowerOfTwo(unsigned n)
{
return n && (!(n & (n - 1)));
}
// Returns position of the only set bit in 'n'
int findPosition(unsigned n)
{
if (!isPowerOfTwo(n))
return -1;
unsigned count = 0;
// One by one move the only set bit to right till it reaches end
while (n)
{
n = n >> 1;
// increment count of shifts
++count;
}
return count;
}
// Driver code
int main(void)
{
int n = 0;
int pos = findPosition(n);
(pos == -1) ? cout<<"n = "<<n<<", Invalid number\n" :
cout<<"n = "<<n<<", Position "<< pos<<endl;
n = 12;
pos = findPosition(n);
(pos == -1) ? cout<<"n = "<<n<<", Invalid number\n" :
cout<<"n = "<<n<<", Position "<< pos<<endl;
n = 128;
pos = findPosition(n);
(pos == -1) ? cout<<"n = "<<n<<", Invalid number\n" :
cout<<"n = "<<n<<", Position "<< pos<<endl;
return 0;
}
// This code is contributed by rathbhupendra
C
// C program to find position of only set bit in a given number
#include <stdio.h>
// A utility function to check whether n is power of 2 or not
int isPowerOfTwo(unsigned n)
{
return n && (!(n & (n - 1)));
}
// Returns position of the only set bit in 'n'
int findPosition(unsigned n)
{
if (!isPowerOfTwo(n))
return -1;
unsigned count = 0;
// One by one move the only set bit to right till it reaches end
while (n) {
n = n >> 1;
// increment count of shifts
++count;
}
return count;
}
// Driver program to test above function
int main(void)
{
int n = 0;
int pos = findPosition(n);
(pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);
n = 12;
pos = findPosition(n);
(pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);
n = 128;
pos = findPosition(n);
(pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);
return 0;
}
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to find position of only
// set bit in a given number
class GFG {
// A utility function to check whether
// n is power of 2 or not
static boolean isPowerOfTwo(int n)
{
return n > 0 && ((n & (n - 1)) == 0);
}
// Returns position of the only set bit in 'n'
static int findPosition(int n)
{
if (!isPowerOfTwo(n))
return -1;
int count = 0;
// One by one move the only set bit
// to right till it reaches end
while (n > 0) {
n = n >> 1;
// increment count of shifts
++count;
}
return count;
}
// Driver code
public static void main(String[] args)
{
int n = 0;
int pos = findPosition(n);
if (pos == -1)
System.out.println("n = " + n + ", Invalid number");
else
System.out.println("n = " + n + ", Position " + pos);
n = 12;
pos = findPosition(n);
if (pos == -1)
System.out.println("n = " + n + ", Invalid number");
else
System.out.println("n = " + n + ", Position " + pos);
n = 128;
pos = findPosition(n);
if (pos == -1)
System.out.println("n = " + n + ", Invalid number");
else
System.out.println("n = " + n + ", Position " + pos);
}
}
// This code is contributed by mits
Python 3
# Python 3 program to find position
# of only set bit in a given number
# A utility function to check whether
# n is power of 2 or not
def isPowerOfTwo(n) :
return (n and ( not (n & (n-1))))
# Returns position of the only set bit in 'n'
def findPosition(n) :
if not isPowerOfTwo(n) :
return -1
count = 0
# One by one move the only set bit to
# right till it reaches end
while (n) :
n = n >> 1
# increment count of shifts
count += 1
return count
# Driver program to test above function
if __name__ == "__main__" :
n = 0
pos = findPosition(n)
if pos == -1 :
print("n =", n, "Invalid number")
else :
print("n =", n, "Position", pos)
n = 12
pos = findPosition(n)
if pos == -1 :
print("n =", n, "Invalid number")
else :
print("n =", n, "Position", pos)
n = 128
pos = findPosition(n)
if pos == -1 :
print("n =", n, "Invalid number")
else :
print("n =", n, "Position", pos)
# This code is contributed by ANKITRAI1
C
// C# program to find position of only
// set bit in a given number
using System;
class GFG {
// A utility function to check whether
// n is power of 2 or not
static bool isPowerOfTwo(int n)
{
return n > 0 && ((n & (n - 1)) == 0);
}
// Returns position of the only set bit in 'n'
static int findPosition(int n)
{
if (!isPowerOfTwo(n))
return -1;
int count = 0;
// One by one move the only set bit
// to right till it reaches end
while (n > 0) {
n = n >> 1;
// increment count of shifts
++count;
}
return count;
}
// Driver code
static void Main()
{
int n = 0;
int pos = findPosition(n);
if (pos == -1)
Console.WriteLine("n = " + n + ", Invalid number");
else
Console.WriteLine("n = " + n + ", Position " + pos);
n = 12;
pos = findPosition(n);
if (pos == -1)
Console.WriteLine("n = " + n + ", Invalid number");
else
Console.WriteLine("n = " + n + ", Position " + pos);
n = 128;
pos = findPosition(n);
if (pos == -1)
Console.WriteLine("n = " + n + ", Invalid number");
else
Console.WriteLine("n = " + n + ", Position " + pos);
}
}
// This code is contributed by mits
服务器端编程语言(Professional Hypertext Preprocessor 的缩写)
<?php
// PHP program to find position of
// only set bit in a given number
// A utility function to check
// whether n is power of 2 or not
function isPowerOfTwo($n)
{
return $n && (! ($n & ($n - 1)));
}
// Returns position of the
// only set bit in 'n'
function findPosition($n)
{
if (!isPowerOfTwo($n))
return -1;
$count = 0;
// One by one move the only set
// bit to right till it reaches end
while ($n)
{
$n = $n >> 1;
// increment count of shifts
++$count;
}
return $count;
}
// Driver Code
$n = 0;
$pos = findPosition($n);
if(($pos == -1) == true)
echo "n = ", $n, ", ",
" Invalid number", "\n";
else
echo "n = ", $n, ", ",
" Position ", $pos, "\n";
$n = 12;
$pos = findPosition($n);
if (($pos == -1) == true)
echo "n = ", $n, ", ",
" Invalid number", "\n";
else
echo "n = ", $n,
" Position ", $pos, "\n";
$n = 128;
$pos = findPosition($n);
if(($pos == -1) == true)
echo "n = ", $n, ", ",
" Invalid number", "\n";
else
echo "n = ", $n, ", ",
" Position ", $pos, "\n";
// This code is contributed by ajit
?>
java 描述语言
<script>
// JavaScript program to find position
// of only set bit in a given number
// A utility function to check whether
// n is power of 2 or not
function isPowerOfTwo(n) {
return (n && ( !(n & (n-1))))
}
// Returns position of the only set bit in 'n'
function findPosition(n) {
if (!isPowerOfTwo(n))
return -1
var count = 0
// One by one move the only set bit to
// right till it reaches end
while (n) {
n = n >> 1
// increment count of shifts
count += 1
}
return count
}
// Driver program to test above function
var n = 0
var pos = findPosition(n)
if (pos == -1)
document.write("n = ", n, ", Invalid number ")
else
document.write("n =", n, ", Position ", pos)
document.write("<br>")
n = 12
pos = findPosition(n)
if (pos == -1)
document.write("n = ", n, ", Invalid number")
else
document.write("n = ", n, ", Position ", pos)
document.write("<br>")
n = 128
pos = findPosition(n)
if (pos == -1)
document.write("n = ", n, ", Invalid number")
else
document.write("n = ", n, ", Position ", pos)
document.write("<br>")
// This code is contributed by AnkThon
</script>
输出:
n = 0, Invalid number
n = 12, Invalid number
n = 128, Position 8
我们也可以用原木底座 2 找位置。感谢阿伦库马提出这个解决方案。
C++
#include <bits/stdc++.h>
using namespace std;
unsigned int Log2n(unsigned int n)
{
return (n > 1) ? 1 + Log2n(n / 2) : 0;
}
int isPowerOfTwo(unsigned n)
{
return n && (!(n & (n - 1)));
}
int findPosition(unsigned n)
{
if (!isPowerOfTwo(n))
return -1;
return Log2n(n) + 1;
}
// Driver code
int main(void)
{
int n = 0;
int pos = findPosition(n);
(pos == -1) ? cout<<"n = "<<n<<", Invalid number\n" :
cout<<"n = "<<n<<", Position "<<pos<<" \n";
n = 12;
pos = findPosition(n);
(pos == -1) ? cout<<"n = "<<n<<", Invalid number\n" :
cout<<"n = "<<n<<", Position "<<pos<<" \n";
n = 128;
pos = findPosition(n);
(pos == -1) ? cout<<"n = "<<n<<", Invalid number\n" :
cout<<"n = "<<n<<", Position "<<pos<<" \n";
return 0;
}
// This code is contributed by rathbhupendra
C
#include <stdio.h>
unsigned int Log2n(unsigned int n)
{
return (n > 1) ? 1 + Log2n(n / 2) : 0;
}
int isPowerOfTwo(unsigned n)
{
return n && (!(n & (n - 1)));
}
int findPosition(unsigned n)
{
if (!isPowerOfTwo(n))
return -1;
return Log2n(n) + 1;
}
// Driver program to test above function
int main(void)
{
int n = 0;
int pos = findPosition(n);
(pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);
n = 12;
pos = findPosition(n);
(pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);
n = 128;
pos = findPosition(n);
(pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);
return 0;
}
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to find position
// of only set bit in a given number
class GFG {
static int Log2n(int n)
{
return (n > 1) ? 1 + Log2n(n / 2) : 0;
}
static boolean isPowerOfTwo(int n)
{
return n > 0 && ((n & (n - 1)) == 0);
}
static int findPosition(int n)
{
if (!isPowerOfTwo(n))
return -1;
return Log2n(n) + 1;
}
// Driver code
public static void main(String[] args)
{
int n = 0;
int pos = findPosition(n);
if (pos == -1)
System.out.println("n = " + n + ", Invalid number ");
else
System.out.println("n = " + n + ", Position " + pos);
n = 12;
pos = findPosition(n);
if (pos == -1)
System.out.println("n = " + n + ", Invalid number ");
else
System.out.println("n = " + n + ", Position " + pos);
n = 128;
pos = findPosition(n);
if (pos == -1)
System.out.println("n = " + n + ", Invalid number ");
else
System.out.println("n = " + n + ", Position " + pos);
}
}
// This code is contributed by mits
Python 3
# Python program to find position
# of only set bit in a given number
def Log2n(n):
if (n > 1):
return (1 + Log2n(n / 2))
else:
return 0
# A utility function to check
# whether n is power of 2 or not
def isPowerOfTwo(n):
return n and (not (n & (n-1)) )
def findPosition(n):
if (not isPowerOfTwo(n)):
return -1
return Log2n(n) + 1
# Driver program to test above function
n = 0
pos = findPosition(n)
if(pos == -1):
print("n =", n, ", Invalid number")
else:
print("n = ", n, ", Position ", pos)
n = 12
pos = findPosition(n)
if(pos == -1):
print("n =", n, ", Invalid number")
else:
print("n = ", n, ", Position ", pos)
n = 128
pos = findPosition(n)
if(pos == -1):
print("n = ", n, ", Invalid number")
else:
print("n = ", n, ", Position ", pos)
# This code is contributed
# by Sumit Sudhakar
C
// C# program to find position
// of only set bit in a given number
using System;
class GFG {
static int Log2n(int n)
{
return (n > 1) ? 1 + Log2n(n / 2) : 0;
}
static bool isPowerOfTwo(int n)
{
return n > 0 && ((n & (n - 1)) == 0);
}
static int findPosition(int n)
{
if (!isPowerOfTwo(n))
return -1;
return Log2n(n) + 1;
}
// Driver program to test above function
static void Main()
{
int n = 0;
int pos = findPosition(n);
if (pos == -1)
Console.WriteLine("n = " + n + ", Invalid number ");
else
Console.WriteLine("n = " + n + ", Position " + pos);
n = 12;
pos = findPosition(n);
if (pos == -1)
Console.WriteLine("n = " + n + ", Invalid number ");
else
Console.WriteLine("n = " + n + ", Position " + pos);
n = 128;
pos = findPosition(n);
if (pos == -1)
Console.WriteLine("n = " + n + ", Invalid number ");
else
Console.WriteLine("n = " + n + ", Position " + pos);
}
}
// This code is contributed by mits
服务器端编程语言(Professional Hypertext Preprocessor 的缩写)
<?php
// PHP program to find position
// of only set bit in a given number
function Log2n($n)
{
return ($n > 1) ? 1 +
Log2n($n / 2) : 0;
}
function isPowerOfTwo($n)
{
return $n && (! ($n &
($n - 1)));
}
function findPosition($n)
{
if (!isPowerOfTwo($n))
return -1;
return Log2n($n) + 1;
}
// Driver Code
$n = 0;
$pos = findPosition($n);
if(($pos == -1) == true)
echo "n =", $n, ", ",
" Invalid number", "\n";
else
echo "n = ", $n, ", ",
" Position n", $pos, "\n";
$n = 12;
$pos = findPosition($n);
if(($pos == -1) == true)
echo "n = ", $n, ", ",
" Invalid number", "\n";
else
echo "n =", $n, ", ",
" Position", $pos, "\n";
// Driver Code
$n = 128;
$pos = findPosition($n);
if(($pos == -1) == true)
echo "n = ", $n, ", ",
" Invalid number", "\n";
else
echo "n = ", $n, ", ",
" Position ", $pos, "\n";
// This code is contributed by aj_36
?>
java 描述语言
<script>
// JavaScript program to find position
// of only set bit in a given number
function Log2n(n){
if (n > 1)
return (1 + Log2n(n / 2))
else
return 0
}
// A utility function to check
// whether n is power of 2 or not
function isPowerOfTwo(n){
return n && ( ! (n & (n-1)) )
}
function findPosition(n){
if (isPowerOfTwo(n) == false)
return -1
return Log2n(n) + 1
}
// Driver program to test above function
var n = 0
var pos = findPosition(n)
if(pos == -1)
document.write("n = ", n, ", Invalid number")
else
document.write("n = ", n, ", Position ", pos)
document.write("<br>")
n = 12
pos = findPosition(n)
if(pos == -1)
document.write("n = ", n, ", Invalid number")
else
document.write("n = ", n, ", Position ", pos)
document.write("<br>")
n = 128
pos = findPosition(n)
if(pos == -1)
document.write("n = ", n, ", Invalid number")
else
document.write("n = ", n, ", Position ", pos)
// This code is contributed AnkThon
</script>
输出:
n = 0, Invalid number
n = 12, Invalid number
n = 128, Position 8
本文由纳伦德拉·康拉尔卡尔整理。如果你发现任何不正确的地方,或者你想分享更多关于上面讨论的话题的信息,请写评论。
版权属于:月萌API www.moonapi.com,转载请注明出处