在R语言中实现阿姆斯特朗数判断及区间查询功能的技术问询
R语言阿姆斯特朗数判断函数的完整实现与解析
看起来你正在编写一个兼具单个数字阿姆斯特朗数判断和区间内阿姆斯特朗数查找的R函数,我先帮你把未完成的代码补全,再详细解释每个部分的逻辑:
你的现有代码(未完成)
Armstrong <- function() { num <- as.integer(readline(prompt="Enter a number: ")) sum <- 0 temp <- num while(temp > 0) { digit <- temp %% 10 sum <- sum + (digit...
补全并优化后的完整函数
Armstrong <- function() { # 第一步:判断单个输入数字是否为阿姆斯特朗数 num <- as.integer(readline(prompt="Enter a number: ")) # 输入合法性校验:只处理正整数,避免无效输入报错 if (is.na(num) || num < 1) { cat("Please enter a positive integer!\n") return() } sum_digits <- 0 temp_num <- num # 获取数字的位数——这是阿姆斯特朗数计算的核心依据 digit_length <- nchar(as.character(num)) # 拆解每一位数字并计算幂次和 while(temp_num > 0) { digit <- temp_num %% 10 sum_digits <- sum_digits + (digit ^ digit_length) temp_num <- temp_num %/% 10 } # 判断并输出结果 if (sum_digits == num) { cat(num, "is an Armstrong number!\n") } else { cat(num, "is NOT an Armstrong number!\n") } # 第二步:查找指定区间内的所有阿姆斯特朗数 lower_bound <- as.integer(readline(prompt="Enter lower bound: ")) upper_bound <- as.integer(readline(prompt="Enter upper bound: ")) # 区间合法性校验 if (is.na(lower_bound) || is.na(upper_bound) || lower_bound > upper_bound || lower_bound < 1) { cat("Please enter valid positive integers where lower bound ≤ upper bound!\n") return() } armstrong_list <- c() # 遍历区间内的每个数字,复用单个数字的判断逻辑 for (i in lower_bound:upper_bound) { temp_i <- i sum_i <- 0 len_i <- nchar(as.character(i)) while(temp_i > 0) { digit_i <- temp_i %% 10 sum_i <- sum_i + (digit_i ^ len_i) temp_i <- temp_i %/% 10 } if (sum_i == i) { armstrong_list <- c(armstrong_list, i) } } # 输出区间查找结果 if (length(armstrong_list) > 0) { cat("Armstrong numbers between", lower_bound, "and", upper_bound, "are:\n") print(armstrong_list) } else { cat("There are no Armstrong numbers between", lower_bound, "and", upper_bound, "!\n") } }
关键逻辑说明
- 阿姆斯特朗数核心规则:一个n位数,其每个位上的数字的n次幂之和等于它本身(比如153 = 1³ + 5³ + 3³),因此我们首先用
nchar()获取数字的位数,这是计算的关键。 - 输入校验:加入了对非正整数、无效字符输入的判断,避免函数运行时出现报错。
- 单个数字判断:通过
while循环拆解数字的每一位,计算幂次和后与原数对比,得出判断结果。 - 区间查找:遍历区间内的每个数字,复用单个数字的判断逻辑,收集所有符合条件的数后统一输出。
内容的提问来源于stack exchange,提问作者user9714138
相关产品推荐
相关产品推荐

