zoukankan      html  css  js  c++  java
  • 汉明距离

    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
    */
    

      

  • 相关阅读:
    @getMapping与@postMapping
    springcloud--入门
    Linux(centos6.5)mysql安装
    基于用户Spark ALS推荐系统(转)
    hadoop MapReduce在Linux上运行的一些命令
    Navicat连接阿里云轻量级应用服务器mysql
    HDFS操作笔记
    线程池的5种创建方式
    分布式共享锁的程序逻辑流程
    推荐系统常用数据集
  • 原文地址:https://www.cnblogs.com/yzg-14/p/12370233.html
Copyright © 2011-2022 走看看