当前位置: 首页 > ai >正文

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.xdnf.cn/news/14353.html

相关文章:

  • Python Pillow 库详解文档
  • pythton 语言的独特语法
  • Axure应用交互设计:多种类型元件实现新增中继器数据
  • 【springcloud】快速搭建一套分布式服务springcloudalibaba(五)
  • Python爬虫实战:研究Mr. Queue相关技术
  • 【Java SE】类和对象(3)
  • Kafka源码P2-生产者缓冲区
  • 基于大模型预测缺铁性贫血的综合技术方案大纲
  • 记录一次 Oracle 表空间不足问题的解决过程
  • Linux进程间通信(上)
  • Proteus8.17-LCD12864液晶屏幕仿真模型
  • 华为OD机试-考勤信息-双指针(JAVA 2025B卷)
  • AI是什么?大模型、语料、训练、推理、机器学习、神经网络等专业名词如何关联
  • 基于docker的nocobase本地部署流程
  • CPU的异常处理
  • PC16550 UART接收中断处理完整示例代码
  • 134-135Elements-UI组件库
  • 03- 六自由度串联机械臂(ABB)动力学分析
  • SoftMax 函数
  • Unity基础-范围检测
  • Redis全面深入学习目录
  • 求数组中最长单调不降连续子数组的长度
  • stm32 f103c8t6仿真 串口收发测试
  • 用AI配合MCP快速生成n8n工作流
  • 【Linux服务器】-安装zabbix-负载环境(故障自动切换场景)
  • HarmonyOS Grid 网格拖拽完全指南
  • 设备健康管理系统搭建全技术解析:从架构设计到智能运维实践
  • Linux 忘记root密码如何解决-linux025
  • 理解 package.json 中的版本控制:“nuxt“: “3.16.0“ vs “nuxt“: “^3.16.0“ 的深层差异
  • DependencyMatcher + ML Reranking 策略设计实践