我试图找出一种最有效的方法来计算数字字符串的加权数字加权(其中权重等于数字字符串中数字的位置)。
示例:对于数字1059,加权的数字总和计算为1 * 1 + 0 * 2 + 5 * 3 + 9 * 4 = 52
我想允许输入具有任何长度,但是如果有更有效的方式,当字符串长度有限制时(例如,知道数字不再是10位数允许更高效的程序我也对此持开放态度。此外,如果输入的类型为numeric
而非character
,则也是可接受的。
我现在拥有的是一个老式的循环:
wsod <- function(str) {
output <- 0
for (pos in 1:nchar(str)) {
digit <- as.numeric(substr(str, pos , pos))
output <- output + pos * digit
}
output
}
已经为Python提出了{p> A few solutions(使用数字输入),但我不认为它们直接适用于R.
答案 0 :(得分:4)
> number <- 1059
> x <- strsplit(as.character(number), "")[[1]]
> y <- seq_len(nchar(number))
> as.numeric(as.numeric(x) %*% y)
[1] 52
答案 1 :(得分:2)
weighted.digit <- function(str) {
splitted.nums <- as.numeric(strsplit(str, '')[[1]])
return(sum(splitted.nums * 1:length(splitted.nums)))
}
weighted.digit('1059')
[1] 52
可以修改它以接受数字输入,然后只需将其转换为字符作为第一步。