杜德尼数输出不完整求助:仅显示前两个数,循环条件判定异常
修复R语言杜德尼数查找代码的问题
你的代码只输出前两个杜德尼数,核心问题有两个:
sum_of_digits未重置:这个变量在每次检查新的立方数前没有清零,导致后续循环不断累加之前所有符合条件数字的各位和,判断逻辑完全失效。- 浮点数精度隐患:
nthroot(i,3)%%1==0依赖浮点数运算,部分立方数可能因精度误差被误判(比如大数字的立方根计算)。
修正后的代码
for(i in 0:(54^3)){ k <- round(i^(1/3)) # 验证k是否为i的精确立方根,规避浮点数误差 if(k^3 == i){ sum_of_digits <- 0 # 拆分数字并计算各位和 digits <- strsplit(as.character(i), "")[[1]] sum_of_digits <- sum(as.numeric(digits)) if(k == sum_of_digits){ print(i) } } }
关键修改说明
- 移除
pracma依赖:改用整数运算验证立方根——先计算k为i的立方根近似值,再通过k^3 == i确认是否为精确立方数,彻底避免浮点数精度问题。 - 重置数字和变量:每次处理新的立方数时,先将
sum_of_digits设为0,确保只计算当前i的各位数字和。 - 简化数字拆分逻辑:用
strsplit直接拆分数字字符,比循环substr更简洁,也避免了循环计数的潜在错误。
运行修正后的代码,会输出全部7个杜德尼数:0、1、8、1729、4104、13832、20683。
内容的提问来源于stack exchange,提问作者SAAD
相关产品推荐
相关产品推荐

