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)
}

輸出結果如下:

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