《leetcode-go》字符串乘法

该博客介绍了如何使用Go语言实现两个大整数的乘法运算。通过将数字字符串拆分成单个字符,然后按位计算乘积,最终得到结果字符串。算法避免了将大数转换为整数类型可能导致的溢出问题,适合处理任意大小的非负整数乘法。

给出两个用字符串表示的数字,将两个数字的乘积作为字符串返回。
备注:数字可以无限大,且是非负数。

思路:按位区分求乘积,结果也是按位存储,也就是从最低位到最高位依次计算

package main
import (
    "strings"
    "strconv"
)
/**
  * 
  * @param num1 string字符串 
  * @param num2 string字符串 
  * @return string字符串
*/
func multiply( num1 string ,  num2 string ) string {
    // write code here
    num1Slice := strings.Split(num1, "")
	num2Slice := strings.Split(num2, "")
	//从个位数字开始
	length1 := len(num1Slice)
	length2 := len(num2Slice)
	if length1 == 1 && num1Slice[0] == "0" {
		return "0"
	}
	if length2 == 1 && num2Slice[0] == "0" {
		return "0"
	}
	flag := 0
	res := ""
	for i := 1; i <= length1+length2-1; i++ {
		multi := 0
		for j := 0; j <= length1-1 && j < i; j++ {
			if length2-1-(i-j-1) < 0 {
				continue
			}
			//j代表第一个数字个十百千位的第几位,求得另一个数字是第几位
			number1, _ := strconv.Atoi(num1Slice[length1-1-j])
			number2, _ := strconv.Atoi(num2Slice[length2-1-(i-j-1)])
			multi += number1 * number2
		}
		multi += flag
		flag = multi / 10
		res = strconv.Itoa(multi%10) + res
	}
	if flag > 0 {
		res = strconv.Itoa(flag) + res
	}
	return res
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值