我正在尝试创建一个函数,它计算大数字的位数之和,即
100^100
。本文描述的方法
question
不工作,如下所示。我试着想出一个能完成这项工作的功能,但没能走得很远。
输入的形式为
a^b
在哪里
1 < a, b < 100
和
a
和
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)
考虑以下测试:
x <- c(1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9)
as.numeric(paste(x, collapse = ''))
# [1] 1.234568e+17
sum(x)
# 90
digitSumLarge(as.numeric(paste(x, collapse = '')))
# 85
digitsum(as.numeric(paste(x, collapse = '')))
# 81, with warning message about loss of accuracy
我能用R写这样一个函数吗?