Go語言程式:顯示兩個區間之間的阿姆斯特朗數


阿姆斯特朗數,也稱為自戀數,是一個等於其自身數字的每個數字的冪之和的數字。在這裡,我們將展示在 Go 程式語言中列印阿姆斯特朗數的不同方法。

方法一:使用 Math 包

在這個例子中,我們將使用 Math 包中不同的函式來列印指定範圍內的阿姆斯特朗數。

語法

func Pow(a, b float64) float64

**pow()** 函式存在於 Math 包中,用於將一個數字提升到另一個數字的指數。該函式以 float64 格式接受兩個數字作為引數,並透過執行 ab 操作返回結果。

func Log(x float64) float64

**log()** 函式存在於 Math 包中,用於查詢數字的自然對數。它以 float64 格式接受需要計算自然對數的數字作為引數,並以相同格式返回最終結果。

演算法

  • **步驟 1** - 匯入 fmt 和 math 包。

  • **步驟 2** - 開始 main() 函式。

  • **步驟 3** - 在 main() 函式內初始化兩個整型變數來儲存數字。

  • **步驟 4** - 使用 for 迴圈迭代區間內的每個數字。

  • **步驟 5** - 現在,一次取數字的每個數字,並將它們相加,方法是用 10 的冪次方乘以它們。

  • **步驟 5** - 列印輸出

示例

使用 math 包的 Go 語言程式,用於顯示兩個區間之間的阿姆斯特朗數

package main
import (
   "fmt"
   "math"
)
func main() {
   var n int = 100
   var m int = 1000
   fmt.Println("Armstrong numbers between", n, "and", m, "are:")
   fmt.Println()
   for i := n; i <= m; i++ {
      num := i
	  sum := 0
	  n := int64(math.Floor(math.Log10(float64(num))) + 1)
	  for ; num > 0; num /= 10 {
	     sum += int(math.Pow(float64(num%10), float64(n)))
	  }
	  if i == sum {
	     fmt.Printf("%d ", i)
	  }
   }
}

輸出

Armstrong numbers between 100 and 1000 are:

153 370 371 407

方法二:使用 Strconv 包

在這種方法中,我們將使用 strconv 包來查詢兩個限制之間的阿姆斯特朗數。

語法

func Itoa(x int) string

**Itoa()** 函式存在於 strconv 包中,用於在基數為 10 時獲取整數變數的字串表示。該函式接受需要獲取字串等價物的變數作為引數,並返回可以儲存和列印到螢幕上的字串表示。

func len(v Type) int

**len()** 函式用於獲取任何引數的長度。它將一個引數作為資料型別變數(我們希望找到其長度的變數)作為引數,並返回整數型別的變數長度。

func Atoi(s string) (int, error)

**Atoi()** 函式存在於 strconv 包中,用於將給定基數的字串值轉換為整數。該函式接受字串變數作為引數,並返回該字串的整數等價物以及一個錯誤變數。如果在執行相應的轉換時出現問題,則錯誤變數具有值。

演算法

  • **步驟 1** - 首先,我們需要匯入 fmt 和 strconv 包。

  • **步驟 2** - 然後,開始 main() 函式。在 main() 函式內初始化兩個整型變數來儲存數字的上限和下限。

  • **步驟 3** - 列印這兩個數字。

  • **步驟 4** - 使用 for 迴圈迭代這兩個數字之間的每個元素。

  • **步驟 5** - 使用 strconv 包的 Itoa() 函式將當前數字轉換為字串。

  • **步驟 6** - 使用 len() 函式查詢該數字的長度。

  • **步驟 7** - 現在,呼叫 pow() 函式來查詢數字的位數之和,方法是用數字的 10 的冪次方乘以它們。

  • **步驟 8** - 將函式返回的值儲存在一個變數中。

示例

使用 strconv 包的 Go 語言程式,用於顯示兩個區間之間的阿姆斯特朗數

package main
import (
   "fmt"
   "strconv"
)
func main() {
   var n int = 1000
   var m int = 10000
   fmt.Println("Armstrong numbers between", n, "and", m, "are:")
   fmt.Println()
   for i := n; i <= m; i++ {
      num := strconv.Itoa(i)
	   sum := 0
	   n := len(num)
      for _, digit := range num {
	      d, _ := strconv.Atoi(string(digit))
		   sum += pow(d, n)
	   }
      if i == sum {
         fmt.Printf("%d ", i)
	   }
   }
}
func pow(a, b int) int {
   res := 1
   for i := 0; i < b; i++ {
      res *= a
   }
   return res
}

輸出

Armstrong numbers between 1000 and 10000 are:

1634 8208 9474

結論

我們已經成功編譯並執行了一個 Go 語言程式,用於顯示兩個區間之間的阿姆斯特朗數以及示例。我們這裡用了兩個例子。在第一個例子中,我們使用 Math 包中的函式來查詢自戀數,而在第二個例子中,我們使用 strconv 包來實現結果。

更新於:2023年2月13日

瀏覽量:273

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.