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 包来实现结果。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP