R语言实现Luhn算法时如何对大于9的整数单独逐位求和
R语言Luhn算法逐位求和实现方案
下面提供两种可直接运行的实现方式:
方案1:通用逐位求和实现(适用于所有数值场景)
自定义逐位求和函数,对向量中每个元素拆分计算后汇总,代码如下:
# 原有代码 nmr <- ("1_9_8_2_0_5_0_1_3_3_4_8") nmr <- strsplit(nmr, "_") nmr <- as.numeric(as.character(unlist(nmr[[1]]))) luhn_alg <- c(0,0,2,1,2,1,2,1,2,1,2,0) x <- nmr*luhn_alg # 新增逐位求和逻辑 digit_sum <- function(n) { if (n <= 9) return(n) sum(as.integer(strsplit(as.character(n), "")[[1]])) } total <- sum(sapply(x, digit_sum))
运行后total的输出为32,符合预期结果。
方案2:Luhn场景优化实现(性能更高)
Luhn算法中单个数字乘以2后的最大值为9*2=18,此时大于9的数值减去9就等价于逐位求和(例如16-9=7=1+6,18-9=9=1+8),无需拆分字符,代码更简洁:
# 原有代码同上 x <- nmr*luhn_alg # 新增处理逻辑 x_processed <- ifelse(x > 9, x - 9, x) total <- sum(x_processed)
运行后输出结果同样为32。
内容的提问来源于stack exchange,提问作者Helan.ge
相关产品推荐
相关产品推荐

