栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Leetcode--Java--43. 字符串相乘

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode--Java--43. 字符串相乘

题目描述

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

样例描述
示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

思路

高精度乘法

    进位留到最后统一处理,方便代码实现

    两个数相乘的结果的放置位置,是所有的数都累加到那个位置,不是覆盖

代码
class Solution {
    public String multiply(String num1, String num2) {
        int m = num1.length(), n = num2.length();
        int a[] = new int[m];
        int b[] = new int[n];
        //逆序,存入数组
        for (int i = m - 1; i >= 0; i -- ) {
            a[m - 1 - i] = num1.charAt(i) - '0';
        }
        for (int i = n - 1; i >= 0; i -- ) {
            b[n - 1 - i] = num2.charAt(i) - '0';
        }
        int res[] = new int[m + n];
        for (int i = 0; i < m; i ++ ) {
            for (int j = 0; j < n; j ++ ) {
                //这里是加等,不是覆盖掉  
                res[i + j] += a[i] * b[j];
            }
        }
        //最后统一处理进位
            for (int i = 0, c = 0; i < m + n || c != 0; i ++ ) {
                int s = c + res[i];
                res[i] = s % 10;
                c = s / 10;
            }
            //去掉高位多余的0
            int k = m + n - 1;
            //最高位的0不要去
            while (k > 0 && res[k] == 0) k --;
            String ret = "";
            while (k >= 0) {
                //不能少了强制char,不然显示的是ASCII码
                ret += (char)(res[k --] + '0');
            }
            return ret;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/712219.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号