水仙花數(Narcissistic number)也被稱爲超完全數字不變數(pluperfect digital invariant, PPDI)、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數(Armstrong number),水仙花數是指一個 3 位數,它的每個位上的數字的 3次冪之和等於它本身(例如:1^3 + 5^3+ 3^3 = 153)
判斷一個整數是否爲水仙花數代碼如下:
//判斷一個整數是不是水仙花數
//水仙花數指一個3位數的各個位數之和等於這個三位數本身
//例如153=1*1*1+5*5*5+3*3*3
func isNarcissusNumber(num int32) bool {
var isNarcissusNumber bool = false
var num_h int32 = num / 100 //百位
var num_d int32 = (num - num_h*100) / 10 //十位
var num_p int32 = num - num_h*100 - num_d*10 //個位
var num_sum = num_h*num_h*num_h + num_d*num_d*num_d + num_p*num_p*num_p //百位的3次方+十位的3次方+個位的3次方
if num_sum == num {
isNarcissusNumber = true
} else {
isNarcissusNumber = false
}
return isNarcissusNumber
}
輸出是否是水仙花數,如果flag = true即是水仙花數,否則不是。
flag := isNarcissusNumber(407)
fmt.Println("flag=", flag)
擴展一下,輸出水仙花的個數,並輸出水仙花數,代碼如下:
//統計100~999之間有多少個水仙花數,並打印這些水仙花數
//水仙花數指一個3位數的各個位數之和等於這個三位數本身
//例如153=1*1*1+5*5*5+3*3*3
func NarcissusNumber() {
var counter int = 0
var num [10]int
var index int = 0
//百位
for i := 1; i <= 9; i++ {
//十位
for j := 0; j <= 9; j++ {
//個位
for k := 0; k <= 9; k++ {
if i*100+j*10+k == i*i*i+j*j*j+k*k*k {
num[index] = i*100 + j*10 + k
index++
counter++
}
}
}
}
fmt.Println("num=", num)
fmt.Println("counter=", counter)
}
輸出結果如下: