题解 | #大数乘法# go + 数组实现

大数乘法

http://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571

go + 数组

以 123 * 456 为例
输入: num1 = "123", num2 = "456" 输出: "56088"




参考 leetcode
https://leetcode-cn.com/problems/multiply-strings/solution/zi-fu-chuan-xiang-cheng-by-leetcode-solution/

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param s string字符串 第一个整数
 * @param t string字符串 第二个整数
 * @return string字符串
*/
func solve( s string ,  t string ) string {
    // write code here
    if s == "0" || t == "0" {
        return "0"
    }

//  两数相乘,最大长度为 m+n
    m, n := len(s), len(t)
    arr := make([]int, m+n)

    for i:=m-1; i>=0; i--{
        n1 := int(s[i]-'0')
        for j:=n-1; j>=0; j--{
            n2 := int(t[j]-'0')
//          m的第i位乘以n的第j位,位于最终数组的j+j+1的位置
//          理解这里很重要。i+j+1 可能是一个大于10的数字
//          因为这里存储的是乘积,没向前进位
            arr[i+j+1] += n1*n2
        }
    }

//  处理进位,i的进位位置在i-1位置
    for i:= len(arr)-1; i>0; i--{
        arr[i-1] += arr[i]/10
        arr[i] = arr[i]%10
    }

//  如果第0位为0,则需要处理
    inx := 0
    if arr[0] == 0 {
        inx =1
    }

    res := ""
    for i:= inx; i<len(arr); i++{
        res += strconv.Itoa(arr[i])
    }

    return res
}
全部评论
图示不错,我都能看懂,哈哈哈
点赞 回复 分享
发布于 2021-06-01 23:08

相关推荐

不愿透露姓名的神秘牛友
昨天 14:46
和女友两个人马上毕业,现在我在鹅实习995,周六日偶尔也去北京;她在北京金融007,经常忙到后半夜,周末也没啥休息机会两个人现在都不咋聊天了,一句话隔半小时甚至半天才回。&nbsp;她是个很优秀的妹子,工作也很努力,是值得学习一辈子的人。我在努力工作求转正,即便不行至少赚到了一段不错的实习经历。已经异地了半年,接下来可能还会持续是这个状态。我们都算是对方重要的人,只是感觉看上去不是很有未来的样子。希望牛友们给点的鼓励
梦旅奇缘:很难。异地首先就已经很难了,加上妹子是金融行业,忙碌高压,对情感需求很高,而且见惯纸醉金迷,你的很多优势在她那里可能就不算什么了。这种情况下,在她们那里遇到一个能及时照顾她的人,即使那人可能很多条件不如你,你也有可能被分手。 说白了,两个卷王就不太适合在一起。因为卷王最大的优势,在另一个卷王那里就不算优势了。
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务