【发布时间】:2020-05-14 14:08:09
【问题描述】:
我在 R 中编写了一个代码来反转一个数字。但我得到了inf 作为输出。
digit<-512
rev_num<-0
while(digit>0){
rev_num=rev_num*10 + digit %% 10
digit=digit / 10
}
print(paste(rev_num))
谁能告诉我这段代码的错误?
【问题讨论】:
标签: r while-loop
我在 R 中编写了一个代码来反转一个数字。但我得到了inf 作为输出。
digit<-512
rev_num<-0
while(digit>0){
rev_num=rev_num*10 + digit %% 10
digit=digit / 10
}
print(paste(rev_num))
谁能告诉我这段代码的错误?
【问题讨论】:
标签: r while-loop
除以 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"
【讨论】:
您需要digit = digit %/% 10 而不是/,其中%/% 用于整数除法。而且您需要整数除法,因为使用 / 会给出剩余的小数位,并且您的 while 循环不会停止,直到 digit 达到您的机器可以表示的最小数字,而您的 rev_num 继续以 10 的倍数增长
每次迭代,达到 Inf.
【讨论】:
修正你的代码(这里的数字不是整数,所以当你将它除以 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=""))
【讨论】:
首先,将数字转换为字符串 然后,您可以使用 stri_reverse() 函数形式 stringi
stri_reverse(<String value to reverse>)
然后将字符串转换成数字。
【讨论】:
也许您可以尝试下面的基本 R 代码,使用 toString + utf8ToInt + intToUtf8:
digit<-512
rev_num <- as.numeric(intToUtf8(rev(utf8ToInt(toString(digit)))))
【讨论】: