二进制中1的个数
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。
package main
import (
"fmt"
"strings"
)
func hammingWeight(num uint32) int {
return strings.Count(fmt.Sprintf("%b",num), "1")
}
func main() {
var num uint32
fmt.Scanf("%b", &num)
a := hammingWeight(num)
fmt.Println(a)
}
如果输入的是一个整数(十进制)
package main
import (
"fmt"
"strconv"
)
// 将十进制数字转化为二进制字符串
func convertToBin(num int) string {
s := ""
if num == 0 {
return "0"
}
// num /= 2 每次循环的时候 都将num除以2 再把结果赋值给 num
for ; num > 0; num /= 2 {
lsb := num % 2
// strconv.Itoa() 将数字强制性转化为字符串
s = strconv.Itoa(lsb) + s
}
return s
}
func main() {
var num int
fmt.Scanf("%d", &num)
if num <= 0 {
fmt.Println(-1)
}
s := convertToBin(num)
sum := 0
for i := 0; i < len(s); i++{
if s[i] == '1'{
sum++
}
}
fmt.Printf("%d", sum)
}
转换为二、八、十六进制函数
func ConvertToX(n, num int) string {
s := ""
h:=map[int]string{ //加个字典类型
0:"0",
1:"1",
2:"2",
3:"3",
4:"4",
5:"5",
6:"6",
7:"7",
8:"8",
9:"9",
10:"A",
11:"B",
12:"C",
13:"D",
14:"E",
15:"F",
}
for ; n > 0; n /= num {
lsb := h[n % num]
s = lsb + s
}
return s
}