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.