水仙花数(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)
}
输出结果如下: