基数を指定した数値文字列変換

30分プログラム、その742。数値と文字列の相互変換をやってみました。
単なる相互変換ではおもしろくないので、基数を指定できるようにしてみました。

使い方

scala> strToNum("42",13)
res41: Int = 54

scala> numToStr(54,13)
res42: String = 42

ソースコード

val digits = ('0' to '9') ++ ('A' to 'Z')

/**
 * 基数を指定した数値から文字列への変換
 *
 * @param n 変換元の数値
 * @param base 基数(<= 36)
 * @return 変換した文字列
 */
def numToStr(n : Int, base : Int) : String = {
  if(n < base)
    digits(n).toString
  else
    numToStr(n / base, base) + digits(n % base).toString
}

/**
 * 基数を指定した文字列から数値への変換
 *
 * @param s 変換元の文字列
 * @param base 基数(<= 36)
 * @return 変換した数値
 */
def strToNum(s : String, base : Int) : Int = {
  s.map(_ - '0').foldLeft(0)(_ *base + _)
}