You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:27:04