object Main extends App{
val
num = 291
//转换为2进制
def toBin(number: Int, bin: List[Int]): List[Int] =
number match {
case
0 => bin
case _ => toBin(number/2,
number%2::bin)
}
//记录二进制中1的位置
def Ones(bin: List[Int], index: Int, result: List[Int]):
List[Int] = bin match {
case Nil => result
case
x::y => if (x
== 0) Ones(y,index-1,result)
else
Ones(y,index-1,result:+index)
}
//转换函数
def change(number: Int): String = number
match {
case
x
if(x<=2) =>
"2(" + x + ")+"
case _ => "2(" +
Ones(toBin(number,Nil),toBin(number,Nil).length-
1
,Nil)
.map { x=>
change(x)}.reduceRight(_+_).dropRight(1) +
")+"
}
println(change(
num
).dropRight(1))
}