Обратное число в R - PullRequest
       2

Обратное число в R

3 голосов
/ 29 января 2020

Я пишу код в R, чтобы поменять число. Но я получил inf в качестве вывода.

digit<-512
rev_num<-0
while(digit>0){
  rev_num=rev_num*10 + digit %% 10
 digit=digit / 10
}
print(paste(rev_num))

Может кто-нибудь сказать мне ошибку в этом коде?

Ответы [ 5 ]

5 голосов
/ 29 января 2020

Быстрое исправление вашего подхода добавило бы floor для digit при делении на 10.

digit<-512
rev_num<-0

while(digit>0){
  rev_num=rev_num*10 + digit %% 10
  digit= floor(digit / 10)
}

rev_num
#[1] 215

Существует также функция stri_reverse в stringi

stringi::stri_reverse(512)
#[1] "215"
5 голосов
/ 29 января 2020

Вам нужно digit = digit %/% 10 вместо /, где %/% должно использоваться для целочисленного деления. И вам нужно целочисленное деление, потому что использование / дает остаточные десятичные разряды, а ваше время l oop не останавливается, пока di git не достигнет минимального числа, которое может быть представлено вашей машиной, в то время как ваш rev_num будет увеличиваться в 10 раз. в каждой итерации, достигая Inf.

3 голосов
/ 29 января 2020

Исправьте в своем коде (di git здесь не является целым числом, поэтому, когда вы делите его на 10, получается 51,2, затем 5,12 и т. Д., Поэтому вы получаете INF в качестве вывода):

digit<-512 
rev_num<-0 
while(digit>0){   
    rev_num=rev_num*10 + digit %% 10 
    digit=as.integer(digit / 10) 
} 
print(paste(rev_num))

Другой подход к изменению числа:

z <- 4321
as.numeric(paste(rev(strsplit(as.character(z),"")[[1]]),collapse="")) 
1 голос
/ 29 января 2020

Может быть, вы можете попробовать базовый код R ниже, используя toString + utf8ToInt + intToUtf8:

digit<-512
rev_num <- as.numeric(intToUtf8(rev(utf8ToInt(toString(digit)))))
1 голос
/ 29 января 2020

Сначала вы конвертируете число в строку. Затем вы можете использовать stri_reverse () Форма функции stringi

stri_reverse(<String value to reverse>)

Затем конвертировать строку в Number .

...