如何在Go語言中新增兩個二進位制字串?


本教程將演示如何在Go語言中新增兩個二進位制字串。此外,我們將透過示例涵蓋並理解新增兩個字串時的所有情況。

示例

  • 假設我們要新增兩個二進位制字串“111”和“1011”,它們的數值分別為7和11,相加結果為18,二進位制表示為“10010”。現在我們將逐步進行這些字串的加法運算。

  • 您可以看到字串“111”的長度小於“1011”,因此我們必須使它們相等,為此,我們可以將“0”新增到較短的字串中,這樣值也會保持不變。“111”的長度小於“1011”,因此我們將新增一個零。

  • 現在字串看起來像這樣:

“0111” and “1011”

演算法

  • 步驟1 - 宣告將要相加的字串。

  • 步驟2 - 使用二進位制字串初始化字串。

  • 步驟3 - 在較短的字串的開頭新增“0”。

  • 步驟4 - 將兩個字串相加並將結果儲存到第三個字串中。

示例

package main // fmt package provides the function to print anything import "fmt" // function which will add the binary strings func binaryAdditionOfStrings(string1, string2 string) string { // checking if the length of the first string is greater then // second then calling the function by swapping the parameters if len(string1) > len(string2) { return binaryAdditionOfStrings(string2, string1) } // finding the difference between the length of the strings difference := len(string2) - len(string1) // making both strings equal by adding 0 in front of a smaller string for i := 0; i < difference; i++ { string1 = "0" + string1 } // initializing a variable carry to keep the track of carry after // each addition carry := "0" // In this variable we will store our final string answer := "" // traversing the strings and adding them by picking the index from the end /* /* For example, we are adding “100” and ”110. So, for the last characters in the string i.e “0” and “0” the first else if condition will run. Then for the middle characters i.e “0” and “1” the last else if condition will run and for the first characters i.e “1” and “1” the first if condition will run. */ for i := len(string1) - 1; i >= 0; i-- { if string1[i] == '1' && string2[i] == '1' { if carry == "1" { answer = "1" + answer } else { answer = "0" + answer carry = "1" } } else if string1[i] == '0' && string2[i] == '0' { if carry == "1" { answer = "1" + answer carry = "0" } else { answer = "0" + answer } } else if string1[i] != string2[i] { if carry == "1" { answer = "0" + answer } else { answer = "1" + answer } } } if carry == "1" { answer = "1" + answer } return answer } func main() { // declaring the strings var string1, string2 string // initializing the strings string1 = "10101" string2 = "100111" result := binaryAdditionOfStrings(string1, string2) // Printing the result of the addition of both the binary strings fmt.Println("The Numeric representation of", string1, "is", "21.") fmt.Println("The Numeric representation of", string2, "is", "39.") fmt.Println("The Binary addition of", string1, "and", string2, "is", result, "whose value in numeric is 60.")
}

在上面的程式碼中,主要的邏輯位於binaryAdditionOfStrings()函式中,我們將逐行討論它。

  • if len(string1) > len(string2) {} - 首先,檢查第一個字串的長度是否大於第二個字串,然後透過交換引數再次呼叫該函式。

  • difference:= len(string2) - len(string1) - 接下來,我們找到字串長度的差值,並在較短的字串中新增那麼多零,以使兩個字串的長度相等。

  • carry:= "0" - 現在我們宣告進位和結果變數,並在遍歷字串時更新它們。

  • 此步驟包含核心邏輯,我們在此處遍歷字串並從最後一位開始遍歷。

    • if string1[i] == '1' && string2[i] == '1' {} - 第一個if條件檢查兩個字串中當前索引的值是否為“1”,如果是,則檢查進位的值。

      • 如果進位為“1”,則我們必須新增三個“1”,這在二進位制中等於“11”(數值為3),因此我們將“1”新增到結果字串的前面,進位將保持為“1”。

      • 否則,我們只需要新增兩個“1”,這在二進位制中等於“10”(數值為2),因此我們將“0”新增到結果字串的前面,並將進位設定為“1”。

    • else if string1[i] == '0' && string2[i] == '0' {} - 現在else if條件檢查兩個陣列中當前索引的值是否都為零,然後檢查進位。

      • 如果進位為“1”,則我們必須新增一個“1”和兩個“0”,這在二進位制中等於“1”(數值為1),因此我們將“1”新增到結果字串的前面,進位將變為“0”。

      • 否則,我們只需要新增三個“0”,這在二進位制中等於“0”(數值為0),因此我們將“0”新增到結果字串的前面,進位將保持為“0”。

    • else if string1[i] != string2[i] - 在最後一個條件中,如果兩個字串中當前索引的任何一個值為“1”而另一個值為“0”,則檢查進位的值。

      • 如果進位為“1”,則我們必須新增兩個“1”,這在二進位制中等於“10”(數值為2),因此我們將“0”新增到結果字串的前面,進位將保持為“1”。

      • 否則,我們只需要新增一個“1”,這在二進位制中等於“1”(數值為1),因此我們將“1”新增到結果字串的前面,進位將保持為“0”。

  • 上述迴圈結束後,我們將檢查進位是否為“1”。如果是,則將其新增到結果字串的末尾並返回。

輸出

The numeric representation of 10101 is 21.
The numeric representation of 100111 is 39.
The binary addition of 10101 and 100111 is 111100 whose value in numeric is 60.

這就是關於新增兩個二進位制字串及其在Go語言中的程式碼的全部內容。要了解更多關於Go語言的資訊,您可以瀏覽此教程

更新於:2022年8月26日

1K+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.