#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. это решение работает только для диапазона положительных целых чисел