求最小公倍數(華爲機試,Go)

目錄

題目描述

解決方案

代碼

代碼走讀

傳送門


 

題目描述

正整數A和正整數B的最小公倍數是指:能被A和B整除的最小的正整數值。設計一個算法,求A和B的最小公倍數。

 

輸入描述:輸入兩個正整數A和B,例如

5 7

輸出描述:輸出A和B的最小公倍數,例如

35

 

解決方案

對於正整數A和B,假設這兩個數字的最大值爲max_number。則他們的最小公倍數範圍在閉區間 [max,  A*B] 中。我們定義一個臨時變量current = max_number,current依次遞增到 A*B,在每一次遞增時觀察其是否是A,B的公倍數,若是則找到A和B的最小公倍數current。

 

對於current的遞增有一個注意點。在current遞增的過程中,依次自增1會浪費大量的時間。current只需要每次遞增max就可以準確找到A和B的最小公倍數了。(即每次遞增max_number值保證整除max,若找到同時能夠整除兩者則爲最小公倍數)

 

代碼

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func MaxNumber(number1, number2 int) int {
	if number1 > number2 {
		return number1
	}
	return number2
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	data, _, _ := reader.ReadLine()
	dataList := strings.Split(string(data), " ")
	number1, _ := strconv.Atoi(dataList[0])
	number2, _ := strconv.Atoi(dataList[1])

	min := MaxNumber(number1, number2)
	current := min
	for {
		if current % number1 == 0 && current % number2 == 0 {
			break
		}

		current += min
	}

	fmt.Println(current)
}

 

代碼走讀

 

package main

import (
   "bufio"
   "fmt"
   "os"
   "strconv"
   "strings"
)

# 返回兩個int數的最大值
func MaxNumber(number1, number2 int) int {
   if number1 > number2 {
      return number1
   }
   return number2
}

func main() {
   # 讀取兩個正整數
   reader := bufio.NewReader(os.Stdin)
   data, _, _ := reader.ReadLine()
   dataList := strings.Split(string(data), " ")
   number1, _ := strconv.Atoi(dataList[0])
   number2, _ := strconv.Atoi(dataList[1])

   # 確定最小公倍數範圍下限min
   min := MaxNumber(number1, number2)
   max := number1 * number2


   # 遍歷current, current每次遞增min(即A、B兩個數中的最大值)。若current同時滿足整除A和B,則跳出循環,此時current爲最小公倍數
   current := min
   for {
      if current >= max {
         break
      }

      if current % number1 == 0 && current % number2 == 0 {
         break
      }

      current += min
   }

   fmt.Println(current)
}

 

傳送門

strings.Split()函數

試題鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章