scala中的整数到二进制
为了好玩,我决定写一个代码段,将整数转换成二进制。它似乎正在执行转换,但我想知道是否有什么我可能会错过这一点。如果能得到一些反馈就太好了 谢谢scala中的整数到二进制,scala,recursion,binary,Scala,Recursion,Binary,为了好玩,我决定写一个代码段,将整数转换成二进制。它似乎正在执行转换,但我想知道是否有什么我可能会错过这一点。如果能得到一些反馈就太好了 谢谢 def convertToBinary(n: Int, bin: List[Int]): String = { if(n/2 == 1) { (1::(n%2)::bin).mkString(" ") } else { val r = n%2;val q = n/2;converttobinary(q,r::bin) } }
def convertToBinary(n: Int, bin: List[Int]): String = {
if(n/2 == 1) {
(1::(n%2)::bin).mkString(" ")
} else {
val r = n%2;val q = n/2;converttobinary(q,r::bin)
}
}
1) 格式:-)
2) 签名:
我将省略convert部分,使累加器成为可选参数(函数用户不必提供仅用于内部实现的参数,对吗?)
现在它可以用作:
val str = toBinary(42)
有人可能会建议你拉皮条,这样的功能,所以调用可能看起来像
val str = 42.toBinary // btw, there is such function in std lib: 42.toBinaryString
但我看不到多少利润
另一件让我困扰的事情是,您正在为此使用List&mkString,为什么不使用StringBuilder呢?q和r是什么
最后一点——放置@annotation.tailrec
,以确保即使在将来发生任何更改时,功能也会得到优化
scala> def toBinary(n: Int): String = n match {
| case 0|1 => s"$n"
| case _ => s"${toBinary(n/2)}${n%2}"
| }
toBinary: (n: Int)String
scala> toBinary(155)
res0: String = 10011011
尾部递归
def toBinary(n: Int): String = {
@tailrec def binary(acc: String, n: Int): String = {
n match {
case 0 | 1 => n+acc
case _ => binary((n % 2)+acc, (n / 2))
}
}
binary("",n)
}
这个问题可能更适合于你;首先,它将随着
n=0永远旋转
Your只为Int
旋转。我刚刚为另一个执行此操作的线程添加了一个答案,它适用于Boolean
、Byte
、Short
、Char
、Int
和Long
。R代表余数,Q代表商。我应该使用Stringbuilder而不是List和mkstring。我的代码片段也不处理传入0的情况。您的代码片段只处理Int
的情况,不包括前导零。我刚刚为另一个执行此操作的线程添加了一个答案,它适用于Boolean
、Byte
、Short
、Char
、Int
和Long
。
scala> def toBinary(n: Int): String = n match {
| case 0|1 => s"$n"
| case _ => s"${toBinary(n/2)}${n%2}"
| }
toBinary: (n: Int)String
scala> toBinary(155)
res0: String = 10011011
def toBinary(n: Int): String = n.toBinaryString
def toBinary(n: Int): String = {
@tailrec def binary(acc: String, n: Int): String = {
n match {
case 0 | 1 => n+acc
case _ => binary((n % 2)+acc, (n / 2))
}
}
binary("",n)
}