给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。
输入格式
第一行包含整数n。
第二行包含n个整数,表示整个数列。
输出格式
共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。
数据范围
1≤n≤100000,
0≤数列中元素的值≤109
输入样例:
5
1 2 3 4 5
输出样例:
1 1 2 1 2
Go 代码
package main
import "fmt"
func lowbit(x int) int {
return x & -x
}
func main() {
var n int
fmt.Scan(&n)
for i := 0; i < n; i++ {
var x int
fmt.Scan(&x)
var res int
for x != 0 {
x -= lowbit(x)
res++
}
fmt.Print(res," ")
}
}
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main(){
scanner := bufio.NewScanner(os.Stdin)
bs := make([]byte, 2000*1024)
scanner.Buffer(bs, len(bs))
scanner.Scan()
strconv.Atoi(scanner.Text())
scanner.Scan()
l := strings.Split(scanner.Text(), " ")
res := make([]string, 0)
var k, xx int
for _, s := range l {
xx, _ = strconv.Atoi(s)
k = 0
for xx >0 {
xx -= xx & -xx
k++
}
res = append(res, strconv.FormatInt(int64(k), 10))
}
fmt.Println(strings.Join(res, " "))
return
}
作者:acwa
链接:https://www.acwing.com/activity/content/code/content/207192/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。