armstrong <- function(x) {
tmp <- strsplit(as.character(x), split="")
cubic <- sapply(tmp, function(y)sum(as.numeric(y)^3))
return(cubic == x)
}
s <- 1:1000000
s[armstrong(s)]
如何在1到1000000之间打印阿姆斯壮数字?我写了这段代码,但它只打印1 153 370 371 407
个数字。我想打印1到100万阿姆斯特朗号码。
答案 0 :(得分:1)
以下是我对此问题的解决方案:
s <- 99:1000000
armstrong <- vapply(s, function(x) {
tmp <- strsplit(as.character(x), split="")
exponent <- length(tmp[[1]])
sum <- sapply(tmp, function(y)sum(as.numeric(y)^exponent))
return(sum == x)
},FUN.VALUE = 1)
s[armstrong == 1]
# [1] 153 370 371 407 1634 8208 9474 54748 92727 93084
#[11] 548834
答案 1 :(得分:0)
试试这个:
s <- 1:1000000
s[sapply(s, function(x)
sum(as.integer(unlist(strsplit(as.character(x), split="")))^nchar(as.character(x))) == x)]
#[1] 1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 54748 92727 93084 548834