2016-10-28 7 views
2
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万のアームストロング数を印刷したい。ここで1から1000000までのアームストロング番号

+2

。長さ4の桁の場合、指数はアームストン数で4でなければならないか? https://en.wikipedia.org/wiki/Narcissistic_number –

答えて

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 
+0

ありがとう!できます。 –

0

はこれを試してください:あなたは、指数を使用してはならない「3」すべての時間を私の意見で

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 
+0

ありがとう!それは非常にうまくいく! –

関連する問題