在R中反转一个数字

3

我用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
你需要使用 digit = digit %/% 10 而不是 /,其中 %/% 是用于整数除法。你需要使用整数除法,因为使用 / 会产生余数小数位数,而您的 while 循环直到数字达到机器可以表示的最小数字时才停止,而您的 rev_num 在每次迭代中增加了 10 的倍数,最终可能会达到无限大。

5

如果您想快速解决问题,可以在除以10时为digit添加floor函数。

digit<-512
rev_num<-0

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

rev_num
#[1] 215

stringi 中也有 stri_reverse 函数。

stringi::stri_reverse(512)
#[1] "215"

3

修正您的代码(这里的数字不是整数,所以当您将其除以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
首先,您需要将数字转换为字符串。 然后,您可以使用stringi中的stri_reverse()函数。
stri_reverse(<String value to reverse>)

然后将字符串转换为数字。

1
也许您可以尝试以下基本的 R 代码,使用 toString + utf8ToInt + intToUtf8

digit<-512
rev_num <- as.numeric(intToUtf8(rev(utf8ToInt(toString(digit)))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接