Есть ли более эффективный способ обратить целое число (как положительное, так и отрицательное) в SCALA?

#string #scala #integer #reverse

#строка #scala #целое #обратный

Вопрос:

Я создаю программу на SCALA, которая принимает целое число и меняет его. Например, ввод 30 возвращает вывод 3. Эта программа также должна работать с отрицательными числами, например, ввод -89 возвращает вывод -98. Кроме того, если при обращении первая цифра равна 0, ее следует усечь (от 30 до 3). Это код, который я написал.

 import io.StdIn._

val twoDigitNumber : Int = takeInput()
println("The reversal is "   reverse(twoDigitNumber))

//define a function name reverse to handle the actual reverse process for -ve and  ve numbers
 def reverse(x: Integer): Integer = {

 //4 possibilities:  ve, 1st digit 0; -ve, 1st digit zero; -ve, 1st digit not zero;  ve, 1st digit not zero
 if (x> 0 amp;amp; x.toString.reverse.charAt(0) == 0) {
    x.toString.reverse.substring(1).toInt
 } else if (x<0 amp;amp; x.toString.substring(1).reverse.charAt(0) == 0) {
  ('-'   x.toString.substring(1).reverse.substring(1)).toInt
 } else if (x<0 amp;amp; x.toString.substring(1).reverse.charAt(0)!= 0) {
  ('-'  x.toString.substring(1).reverse).toInt
 } else {
  x.toString.reverse.toInt
 }
}

//reads an integer number
def takeInput() : Int ={
 print("Enter a two-digit integer number: ")
 readInt()
}
  

Есть ли более эффективный способ сделать это?

Ответ №1:

Самый короткий, который я нашел:

 x.signum * x.abs.toString.reverse.toInt
  

Ответ №2:

Это может быть как показано ниже, учитывая, что x — ваш целочисленный ввод:

 val reverseOutput = if (x>0) x.toString.reverse.toInt else -1* ((x * -1).toString.reverse.toInt)
  

Ответ №3:

   def reverseANumber(n: Int): Int = {
    def _reverseANumber(i: Int, i1: Int): Int = i match
      case 0 => i1
      case i =>
        val n = i % 10
        val n1 = n * math.pow(10, (((math.log10(i)   1).toInt) - 1)).toInt
        _reverseANumber(i / 10, i1   n1)

    _reverseANumber(n, 0)
  }
  

Комментарии:

1. это решение работает только для диапазона положительных целых чисел