Golang 解大整數乘法

文章目錄

  • Golang 解大整數乘法
    • 問題描述:LeetCode 43. 字符串相乘
      • 思路
      • Golang 代碼

Golang 解大整數乘法

在這里插入圖片描述

在初學 C 語言的時候,我們一定接觸過“字符串相加”或“字符串相乘”之類的問題,對于初學者而言,這類問題的難度一般來說是比較大的(回想起我大一剛剛學習 C 語言時,解決這兩道題的過程非常的痛苦)。

今天我們學習如何使用 Golang 來解決大整數乘法問題,即“字符串相乘”問題。

問題描述:LeetCode 43. 字符串相乘

思路

我們將num1視為乘數,num2視為被乘數,字符串相乘的基本思路就是每一次取num2當中的一位數字,與整個num1進行相乘,假定num1的長度是m,而num2的長度是n,那么num2中的n個數就需要與num1進行m * n次相乘。

由于我們進行的是乘法,從num2的最后一位開始與num1進行相乘,當進行到倒數第二位的時候,需要將整個相乘的結果向左移動一位,右側添加一個0,畢竟在豎式乘法當中就是這樣做的。

最后將每一次相乘得到的結果通過“字符串加法”匯總起來,就可以得到最終“字符串乘法”的結果。

總的來說,這道題目的綜合性非常的強,既考察了在 Golang 當中如何將字符串與數字進行相互轉換,又考察了“字符串乘法”解題模擬的復雜思路。

Golang 代碼

func multiply(num1 string, num2 string) string {// 大整數乘法// num1 是乘數, num2 是被乘數if num1 == "0" || num2 == "0" {return "0"}m, n := len(num1), len(num2)ans := ""for i := n - 1; i >= 0; i -- {// 使用被乘數的每一位與乘數相乘, 然后將每一次乘法得到的結果通過"字符串加法"加在一起curr := ""for j := n - 1; j > i; j -- {curr += "0"}// ?? 每進行一次乘法之后, 與模擬豎式乘法類似, 這一次乘數當中數字與被乘數相乘的結果需要補零y := int(num2[i] - '0')cnt := 0    // 記錄進位for j := m - 1; j >= 0; j -- {x := int(num1[j] - '0')product := x * y + cntcurr = strconv.Itoa(product % 10) + currcnt = product / 10}for cnt > 0 {curr = strconv.Itoa(cnt % 10) + currcnt /= 10}ans = addStrings(ans, curr)}return ans
} func addStrings(num1, num2 string) string {m, n := len(num1), len(num2)ans := ""cnt := 0for i, j := m - 1, n - 1; i >= 0 || j >= 0; i, j = i - 1, j - 1 {x, y := 0, 0if i >= 0 {x = int(num1[i] - '0')}if j >= 0 {y = int(num2[j] - '0')}curr := x + y + cntans = strconv.Itoa(curr % 10) + anscnt = curr / 10}for cnt > 0 {ans = strconv.Itoa(cnt % 10) + anscnt /= 10}return ans
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85012.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85012.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85012.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

web3-區塊鏈的技術安全/經濟安全以及去杠桿螺旋(經濟穩定)

web3-區塊鏈的技術安全/經濟安全以及去杠桿螺旋(經濟穩定) 三個基本設計問題 技術安全 在技術結構中對其進行原子級的、瞬時利用(無風險) 無風險,因為攻擊者的結果還是二進制的: 只會是攻擊成功 獲利或…

Java多線程通信:wait/notify與sleep的深度剖析(時序圖詳解)

在Java多線程編程中,線程間的通信與協作是實現復雜并發邏輯的關鍵。wait()、notify()以及sleep()方法作為線程控制的重要工具,有著各自獨特的使用場景與規則。本文將深入探討wait()和notify()的協作機制,以及sleep()的阻塞特性,同…

關于使用EasyExcel、 Vue3實現導入導出功能

后端部分: 其中查詢數據的服務省略 1、引用 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.3</version></dependency> 2、controller package com.rs.cphs.sys.controller;i…

機器學習中的數據準備關鍵技術

有效的數據準備對于構建強大的機器學習模型至關重要。本文檔總結并闡述了為監督和非監督學習任務準備數據的關鍵技術。 1. 理解數據類型 有兩種數據類型。定性數據描述對象的特征&#xff0c;而定量數據描述對象的數量。 定性&#xff08;分類&#xff09;數據 名義&#x…

深度學習——基于卷積神經網絡實現食物圖像分類【3】(保存最優模型)

文章目錄 引言一、項目概述二、環境配置三、數據預處理3.1 數據轉換設置3.2 數據集準備 四、自定義數據集類五、CNN模型架構六、訓練與評估流程6.1 訓練函數6.2 評估與模型保存 七、完整訓練流程八、模型保存與加載8.1 保存模型8.2 加載模型 九、優化建議十、常見問題解決十一、…

《棒球百科》棒球怎么玩·棒球9號位

用最簡單的方式介紹棒球的核心玩法和規則&#xff0c;完全零基礎也能看懂&#xff1a; 一句話目標 進攻方&#xff1a;用球棒把球打飛&#xff0c;然后拼命跑完4個壘包&#xff08;逆時針繞一圈&#xff09;得分。 防守方&#xff1a;想盡辦法讓進攻方出局&#xff0c;阻止他…

語言模型是怎么工作的?通俗版原理解讀!

大模型為什么能聊天、寫代碼、懂醫學&#xff1f; 我們從四個關鍵模塊&#xff0c;一步步拆開講清楚 &#x1f447; ? 模塊一&#xff1a;模型的“本事”從哪來&#xff1f;靠訓練數據 別幻想它有意識&#xff0c;它的能力&#xff0c;全是“喂”出來的&#xff1a; 吃過成千…

nrf52811墨水屏edp_service.c文件學習

on_connect函數 /**brief Function for handling the ref BLE_GAP_EVT_CONNECTED event from the S110 SoftDevice.** param[in] p_epd EPD Service structure.* param[in] p_ble_evt Pointer to the event received from BLE stack.*/ static void on_connect(ble_epd_t …

Nginx-2 詳解處理 Http 請求

Nginx-2 詳解處理 Http 請求 Nginx 作為當今最流行的開源 Web 服務器之一&#xff0c;以其高性能、高穩定性和豐富的功能而聞名。在處理 HTTP請求 的過程中&#xff0c;Nginx 采用了模塊化的設計&#xff0c;將整個請求處理流程劃分為若干個階段&#xff0c;每個階段都可以由特…

40-Oracle 23 ai Bigfile~Smallfile-Basicfile~Securefile矩陣對比

小伙伴們是不是在文件選擇上還默認給建文件4G/個么&#xff0c;在oracle每個版本上系統默認屬性是什么&#xff0c;選擇困難癥了沒&#xff0c;一起一次性文件存儲和默認屬性看透。 基于Oracle歷代在存儲架構的技術演進分析&#xff0c;結合版本升級和23ai新特性&#xff0c;一…

【一】零基礎--分層強化學習概覽

分層強化學習&#xff08;Hierarchical Reinforcement Learning, HRL&#xff09;最早一般視為1993 年封建強化學習的提出. 一、HL的基礎理論 1.1 MDP MDP&#xff08;馬爾可夫決策過程&#xff09;&#xff1a;MDP是一種用于建模序列決策問題的框架&#xff0c;包含狀態&am…

Java延時

在 Java 中實現延時操作主要有以下幾種方式&#xff0c;根據使用場景選擇合適的方法&#xff1a; 1. Thread.sleep()&#xff08;最常用&#xff09; java 復制 下載 try {// 延時 1000 毫秒&#xff08;1秒&#xff09;Thread.sleep(1000); } catch (InterruptedExcepti…

電阻篇---下拉電阻的取值

下拉電阻的取值需要綜合考慮電路驅動能力、功耗、信號完整性、噪聲容限等多方面因素。以下是詳細的取值分析及方法&#xff1a; 一、下拉電阻的核心影響因素 1. 驅動能力與電流限制 單片機 IO 口驅動能力&#xff1a;如 STM32 的 IO 口在輸入模式下的漏電流通常很小&#xf…

NY271NY274美光科技固態NY278NY284

美光科技NY系列固態硬盤深度剖析&#xff1a;技術、市場與未來 技術前沿&#xff1a;232層NAND架構與性能突破 在存儲技術的賽道上&#xff0c;美光科技&#xff08;Micron&#xff09;始終是行業領跑者。其NY系列固態硬盤&#xff08;SSD&#xff09;憑借232層NAND閃存架構的…

微信開發者工具 插件未授權使用,user uni can not visit app

參考&#xff1a;https://www.jingpinma.cn/archives/159.html 問題描述 我下載了一個別人的小程序&#xff0c;想運行看看效果&#xff0c;結果報錯信息如下 原因 其實就是插件沒有安裝&#xff0c;需要到小程序平臺安裝插件。處理辦法如下 在 app.json 里&#xff0c;聲…

UE5 讀取配置文件

使用免費的Varest插件&#xff0c;可以讀取本地的json數據 獲取配置文件路徑&#xff1a;當前配置文件在工程根目錄&#xff0c;打包后在 Windows/項目名稱 下 讀取json 打包后需要手動復制配置文件到Windows/項目名稱 下

【kdump專欄】KEXEC機制中SME(安全內存加密)

【kdump專欄】KEXEC機制中SME&#xff08;安全內存加密&#xff09; 原始代碼&#xff1a; /* Ensure that these pages are decrypted if SME is enabled. */ 533 if (pages) 534 arch_kexec_post_alloc_pages(page_address(pages), 1 << order, 0);&#x1f4cc…

C# vs2022 找不到指定的 SDK“Microsof.NET.Sdk

找不到指定的 SDK"Microsof.NET.Sdk 第一查 看 系統盤目錄 C:\Program Files\dotnet第二 命令行輸入 dotnet --version第三 檢查環境變量總結 只要執行dotnet --version 正常返回版本號此問題即解決 第一查 看 系統盤目錄 C:\Program Files\dotnet 有2種方式 去檢查 是否…

Pytest斷言全解析:掌握測試驗證的核心藝術

Pytest斷言全解析&#xff1a;掌握測試驗證的核心藝術 一、斷言的本質與重要性 什么是斷言&#xff1f; 斷言是自動化測試中的驗證檢查點&#xff0c;用于確認代碼行為是否符合預期。在Pytest中&#xff0c;斷言直接使用Python原生assert語句&#xff0c;當條件不滿足時拋出…

【編譯原理】題目合集(一)

未經許可,禁止轉載。 文章目錄 選擇填空綜合選擇 將編譯程序分成若干個“遍”是為了 (D.利用有限的機器內存,但降低了執行效率) A.提高程序的執行效率 B.使程序的結構更加清晰 C.利用有限的機器內存并提高執行效率 D.利用有限的機器內存,但降低了執行效率 詞法分析…