Golang 如何检查两个整数之间的阿姆斯特朗数
在本教程中,我们将编写和解释查找两个整数之间的阿姆斯特朗数的代码。阿姆斯特朗数是一个数字,其中数字的立方的和等于该数字本身。
例如,153是一个如下所示的数字。
153 = 1^3 + 5^3 + 3^3
= 1 + 125 + 27
= 153
步骤
- 步骤1 - 首先,我们声明要找到阿姆斯特朗数的区间内的数字。
-
步骤2 - 现在,我们要求用户输入要找到阿姆斯特朗数的区间。
-
步骤3 - 从第一个数到最后一个数运行for循环,并调用函数检查当前数字是否为阿姆斯特朗数,如果是则打印该数。
示例
时间复杂度
O(1) – 时间复杂度是常数,因为无论输入什么,程序都会在相同时间内执行。
空间复杂度
O(1) – 程序中的变量都是静态的,因此空间复杂度也是常数。
代码
package main
// fmt package provides the function to print anything
import "fmt"
func isArmstrongNumber(num int32) bool {
// declaring the sum variable which will store
// the sum of the cube of each digit in the number
var sum int32 = 0
// declaring and initializing the tempNum variable on which we will
// perform some arithmetic operations ahead
var tempNum int32 = num
// running a for loop till the tempNum become zero
for tempNum != 0 {
// picking each digit by doing mode on the current number
currDigit := tempNum % 10
// adding the cube of the current digit into the number
sum = sum + (currDigit * currDigit * currDigit)
// eliminating the last digit from the end
tempNum = tempNum / 10
}
// if the sum is equal to the number then returning true
if sum == num {
return true
}
return false
}
func main() {
// declaring the integer number using the var keyword between which we
// have to find the Armstrong numbers
var number1, number2 int32
fmt.Println("Enter the numbers between which you want to find the Armstrong numbers.")
// Taking the input of the integers from the user between which we
// have to find the Armstrong numbers
fmt.Println("Enter the first number:")
fmt.Scanln(&number1)
fmt.Println("Enter the second number:")
fmt.Scanln(&number2)
fmt.Println("The Armstrong number between", number1, "and", number2, "are as follow:")
// In this for loop where we are passing each number between the two numbers we have
// took from the user
for num := number1; num <= number2; num++ {
// here we are calling the function to check that the current number is Armstrong
// number or not
if isArmstrongNumber(num) {
fmt.Println(num)
}
}
}
输出
Enter the numbers between which you want to find the Armstrong numbers.
Enter the first number:
0
Enter the second number:
10000
The Armstrong number between 0 and 10000 are as follow:
0
1
153
370
371
407
代码说明
var number1, number2 int32
– 这行代码声明了两个int32类型的变量。在它们之间,我们需要找到所有的阿姆斯特朗数。-
fmt.Scanln(<number1) 和 fmt.Scanln(<number2)
– 在这里我们从用户那里获取输入。 -
for num := number1; num <= number2; num++ {}
– 这个for循环从number1循环到number2。 -
if isArmstrongNumber(num) {}
– 在这个if条件中调用了isArmstrongNumber()函数,并传递了当前for循环的索引号num作为参数。if条件判断的是isArmstrongNumber()函数返回的值。如果值为true,则打印出该数字。 -
func isArmstrongNumber(num int32) bool {}
– 这是isArmstrongNumber()函数。它包含一个int32类型的num参数,并返回一个bool类型的值。var sum int32 = 0
– 在这里我们声明了一个int32类型的sum变量,它将存储每个数字的立方和。-
var tempNum int32 = num
– 声明了一个int32类型的tempNum变量,并将其初始化为num的值。我们将在tempNum上进行算术运算,这就是为什么我们不能直接对num变量执行这些算术运算,之后将与sum进行比较。 -
for tempNum != 0 {}
– 这个循环将一直运行,直到tempNum变为0。 -
currDigit := tempNum % 10
– 我们通过将tempNum与10取模来获取当前数字的个位数,并将其存储在currDigit中。 -
sum = sum + (currDigit * currDigit * currDigit)
– 将currDigit的立方加到sum变量中。 -
tempNum = tempNum / 10
– 将tempNum除以10,以便将最后一位数字从值中删除。 -
if sum == num {}
– 最后,我们将sum与数字进行比较,并返回true或false。
逻辑解释
该数字是阿姆斯特朗数
假设我们有一个数371,我们要检查该数是否是阿姆斯特朗数。
- 通过执行% – 371%10 = 1,取得最后一个数字
Sum = 0 +(1 * 1 * 1) – > sum = 1
Num – > 371/10 = 37
- 通过执行% – 37%10 = 7,取得最后一个数字
Sum = 1 +(7 * 7 * 7) – > sum = 344
Num – > 37/10 = 3
- 通过执行% – 3%10 = 3,取得最后一个数字
Sum = 344 +(3 * 3 * 3) – > sum = 371
Num – > 3/10 = 0
如您所见,总和等于初始数字,因此371是一个阿姆斯特朗数。
数字不是阿姆斯特朗数
假设我们有一个数字251,我们需要检查该数字是否为阿姆斯特朗数。
- 通过执行% – 251%10 = 1,取得最后一个数字
Sum = 0 +(1 * 1 * 1) – > sum = 1
Num – > 251/10 = 25
- 通过执行% – 25%10 = 5,取得最后一个数字
Sum = 1 +(5 * 5 * 5) – > sum = 126
Num – > 25/10 = 2
- 通过执行% – 2%10 = 2,取得最后一个数字
Sum = 126 +(2 * 2 * 2) – > sum = 134
Num – > 2/10 = 0
结论
这就是有关在两个数字之间查找阿姆斯特朗数的Golang代码。要了解更多关于Go的知识,您可以查阅这些教程。
这就是有关在两个数字之间查找阿姆斯特朗数的Golang代码。要了解更多关于Go的知识,您可以查阅这些教程。