【问题标题】:Reverse a number in R反转R中的数字
【发布时间】: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


    【解决方案1】:

    除以 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"
    

    【讨论】:

      【解决方案2】:

      您需要digit = digit %/% 10 而不是/,其中%/% 用于整数除法。而且您需要整数除法,因为使用 / 会给出剩余的小数位,并且您的 while 循环不会停止,直到 digit 达到您的机器可以表示的最小数字,而您的 rev_num 继续以 10 的倍数增长 每次迭代,达到 Inf.

      【讨论】:

        【解决方案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="")) 
        

        【讨论】:

          【解决方案4】:

          首先,将数字转换为字符串 然后,您可以使用 stri_reverse() 函数形式 stringi

          stri_reverse(<String value to reverse>)
          

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-11-30
              • 1970-01-01
              • 2017-09-09
              • 1970-01-01
              • 1970-01-01
              • 2016-12-28
              • 1970-01-01
              相关资源
              最近更新 更多