package main import ( "fmt" "strconv" ) func main() { /* 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ */ //计算二进制 var x, y int fmt.Println("计算汉明距离") fmt.Println("请输入两个数字,按照空格分离") fmt.Scanln(&x, &y) x_bin := convertToBin(x) fmt.Println( x_bin) y_bin := convertToBin(y) fmt.Println(y_bin) //补充零 if len(x_bin) > len(y_bin) { //添加零 n := len(x_bin) - len(y_bin) var lin string for i := 0; i < n; i++ { lin += "0" } y_bin = lin + y_bin fmt.Println(y_bin) } else { //添加零 n := len(y_bin) - len(x_bin) var lin string for i := 0; i < n; i++ { lin += "0" } x_bin = lin + x_bin fmt.Println(x_bin) } flag := 0 for i := 0; i < len(x_bin); i++ { if x_bin[i] != y_bin[i] { flag += 1 } } fmt.Println("汉明距离为:", flag) } // 将十进制数字转化为二进制字符串 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 } /* 计算汉明距离 请输入两个数字,按照空格分离 212 2312 11010100 100100001000 000011010100 汉明距离为: 7 */