2016-10-28 68 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百萬張阿姆斯壯數字。打印1到1000000之間的阿姆斯壯數字

+2

在我看來,你不應該使用的指數「3」所有的時間。對於長度爲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

試試這個:

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

謝謝!它工作得很好! –