大数字位数

时间:2018-07-24 11:01:11

标签: r

我正在尝试创建一个函数,该函数计算git rebase数量级的大数字的总和。如下所示,此question中描述的方法不起作用。我试图提出一个可以完成此任务的功能,但还没有走得很远。

输入将采用100^100的形式,其中a^b1 < a, b < 100a是整数。因此,从这个意义上讲,我愿意将b设为接受两个参数的函数。

digitSumLarge

请考虑以下测试:

digitSumLarge <- function(x) {
  pow <- floor(log10(x)) + 1L
  rem <- x
  i <- 1L
  num <- integer(length = pow)
  # Individually isolate each digit starting from the largest and store it in num
  while(rem > 0) {
    num[i] <- rem%/%(10^(pow - i))
    rem <- rem%%(10^(pow - i))
    i <- i + 1L
  }
  return(num)
}
# Function in the highest voted answer of the linked question.
digitsum <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)

有什么办法可以在R中编写这样的函数吗?

1 个答案:

答案 0 :(得分:2)

您需要任意精度数字。带有R的数字(双精度浮点数)的a^b只能以有限的精度表示,而不能完全代表足够大的输入。

library(gmp)
a <- as.bigz(13)
b <- as.bigz(67)
sum(as.numeric(strsplit(as.character(a^b), split = "")[[1]]))
#[1] 328