文档章节

Scala 把一个二进制的串转换成十进制数据输出

BruceGao
 BruceGao
发布于 2015/02/05 16:35
字数 295
阅读 1551
收藏 0

1, 非递归实现

/**
	 * 把输入的二进制数字转换成十进制返回(非递归实现)
	 * @param src 例如: "1111"
	 * @return
	 */
	def binaryToDecWithOutRecur(src: String): Int = {

		if(!src.matches("[0|1]*")){
			println("invalid input")
			return 0
		}

		val tmp = src.reverse
		var res: Int = 0

		for(i <- 0 to tmp.length - 1){
			res += tmp.substring(i,i+1).toInt * (1 << i)
		}

		res
	}


2, 递归实现(线性递归)

/**
	 * 递归实现二进制串转换成十进制数据输出
	 * @param src
	 * @return
	 */
	def binaryToDecRecur(src: String): Int = {

		if(!src.matches("[0|1]*")){
			println("invalid input")
			return 0
		}

		src.length match {
			case 0 => 0
			case 1 => src.toInt * Math.pow(2,0).toInt
			case _ => binaryToDecRecur(src.substring(1,src.length)) +
				src.substring(0,1).toInt * (i << src.length - 1)
		}
		
	}


3, 递归实现(尾递归)


/**
	 * 递归实现二进制串转换成十进制数据输出(尾递归)
	 * @param src
	 * @param res
	 * @return
	 */
	def binaryToDecTailRecur(src: String, res: Int): Int = {
		if(!src.matches("[0|1]*")){
			println("invalid input")
			return 0
		}

		src.length match {
			case 0|1 => res
			case _ => binaryToDecTailRecur(src.substring(0,src.length-1), res + src.substring(0,1).toInt * (1 << src.length - 1))
		}
	}
	
	println(binaryToDecTailRecur("111110", 0))





© 著作权归作者所有

共有 人打赏支持
BruceGao

BruceGao

粉丝 4
博文 14
码字总数 2472
作品 0
浦东
高级程序员
加载中

评论(1)

HEAVEN4499
HEAVEN4499
可以直接给res赋予默认参数04
补基础:自学:计算机科学导论 第三章 数据存储

3.1 数据类型 数字 文字 音频 图像 视频 计算机内部的数据 所有计算机外部的数据类型的数据都采用统一的数据表示法转换后存入计算机中,当数据从计算机输出时再还原回来。这种通用的格式称为...

soulpei
06/26
0
0
补基础:自学:计算机科学导论 第二章 数字系统

2.2 位置化数字系统 在数字中符号所占据的位置决定了其表示的值。在该系统中,数字这样表示: +-(Sk-1 ……S2S1S0 ……S-l)b 它的值是: n = +-(Sk-1 bk-1 + …… + S1 b 1 + S0 b0 + S-1 b...

soulpei
06/26
0
0
数据的机器层次表示

数据是计算机处理和加工的基本单位和对象。在计算机中数据分为无符号数(绝对值)和有符号数(真值)。其中带符号数根据编码分为原码、反码、补码、移码。 计算机中数据的表示最基本的为二进...

sinat_38321889
01/24
0
0
[Java教程 05] 常量与进制概述

前言 上一节我们介绍了注释、关键字与标识符,本章给大家介绍一下常量,准备好没有,要开车了! 常量 常量概述 在程序执行的过程中其值不可以发生改变 Java中常量分类 字面值常量 自定义常量...

呆萌钟
04/03
0
0
C语言网络编程之--字节顺序

C语言网络编程之--字节顺序 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,各个数据类型在内存中的字节长度可以用sizeof(类型关键字)获得。那么字符是如何存放到内存中的呢?...

wzjxzht
2013/01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java工程师用spring boot和web3j构建以太坊区块链应用

区块链最近IT世界的流行语之一。这项有关数字加密货币的技术,并与比特币一起构成了这个热门的流行趋势。它是去中心化的,不可变的分块数据结构,这是可以安全连接和使用的密码算法。在这种结...

笔阁
2分钟前
0
0
聊聊sentinel的SentinelWebAutoConfiguration

序 本文主要研究一下sentinel的SentinelWebAutoConfiguration SentinelWebAutoConfiguration spring-cloud-alibaba-sentinel-autoconfigure-0.2.0.BUILD-SNAPSHOT-sources.jar!/org/springf......

go4it
4分钟前
0
0
java ArrayList 根据对象内的属性排序

//根据修改时间排序Comparator com = new Comparator<ReleaseInfo>() {public int compare(ReleaseInfo reInfo1, ReleaseInfo reInfo2) { //return reInfo2.getModifyTime().c......

成长中的小白
4分钟前
0
0
PowerDesigner p f m

(非原创) P:PirmaryKey 主键 F:ForeignKey 外键 M:Mandatory 强制要求(不能为空) 主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从...

森火
5分钟前
0
0
Nexus Repository Manager 搭建私有docker仓库

Nexus Repository Manager 搭建私有docker仓库 2018年05月08日 14:44:23 阅读数:115 1.下载nexus3的镜像: docker pull sonatype/nexus3 2.使用镜像启动一个容器: docker run -d --name n...

linjin200
6分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部