Golang输出水仙花数

       水仙花数(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)
}

输出结果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章