首页 > 解决方案 > 在 R 中创建边界

问题描述

我正在尝试在 R 中创建一个函数,该函数将要求用户输入一个数字,然后说明它是否是 Armstrong 数字,然后继续要求用户输入上下边界,然后 R 将显示该区间内的阿姆斯壮数。

这是我到目前为止的代码:

Armstrong <- function() {
  num <- as.integer(readline(prompt="Enter a number: "))
  sum <- 0
  temp <- num
  while(temp > 0) {
    digit <- temp %% 10
    sum <- sum + (digit ^ 3)
    temp <- floor(temp / 10)
  }

我不确定如何修复该函数,以便它输入下限和上限,然后在该间隔中显示阿姆斯壮数字字符串。

任何帮助将不胜感激。

标签: r

解决方案


这是一个答案,它使用了Armstrong 数的更一般定义,即等于其数字之和的数字,每个数字都被提高到数字的数量的幂:

Armstrong <- function(n){
  digits <- as.numeric(unlist(strsplit(as.character(n),'')))
  k <- length(digits)
  n == sum(digits^k)
}

要查找给定范围内的所有此类数字:

Armstrong.inrange <- function(a,b){
  nums <- a:b
  nums[which(sapply(nums,Armstrong))]
}

例如:

> Armstrong.inrange(0,10000)
 [1]    0    1    2    3    4    5    6    7    8    9  153  370  371  407 1634
[16] 8208 9474

这与上面链接的维基百科文章中的部分列表一致。


推荐阅读