Golang 如何检查两个整数之间的阿姆斯特朗数

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的知识,您可以查阅这些教程。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程