我用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语言编写了一个数字反转的代码。但是输出结果却是inf
。
digit<-512
rev_num<-0
while(digit>0){
rev_num=rev_num*10 + digit %% 10
digit=digit / 10
}
print(paste(rev_num))
有人能告诉我这段代码中的错误吗?
digit = digit %/% 10
而不是 /
,其中 %/%
是用于整数除法。你需要使用整数除法,因为使用 /
会产生余数小数位数,而您的 while 循环直到数字达到机器可以表示的最小数字时才停止,而您的 rev_num 在每次迭代中增加了 10 的倍数,最终可能会达到无限大。如果您想快速解决问题,可以在除以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"
修正您的代码(这里的数字不是整数,所以当您将其除以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(<String value to reverse>)
toString
+ utf8ToInt
+ intToUtf8
:
digit<-512
rev_num <- as.numeric(intToUtf8(rev(utf8ToInt(toString(digit)))))