美文网首页
43.字符串相乘

43.字符串相乘

作者: HITZGD | 来源:发表于2018-10-28 21:46 被阅读0次

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

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

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

说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

思路
1、字符转转整数,整数相乘,乘完转字符转,这样做发现数太大的话会一出

class Solution {
public:
    string multiply(string num1, string num2) {
        if (num1 == "0" || num2 == "0") return "0";
        long int temp;
        string res;
        long long  IntRes = 0;
        long int IntNum1 = string2int(num1);
        long int IntNum2 = string2int(num2);
        IntRes = IntNum1 * IntNum2;
        res = int2string(IntRes);
        return res;
    }
    int string2int (string StrNum)
    {
        long int Intnum = 0;
        long int temp = 0;
        for (int i = 0; i < StrNum.size(); i++)
        {
            temp = (StrNum[i] - '0');
            Intnum = Intnum * 10 + temp;
        }
        return Intnum;
    }
    string int2string(long int nums)
    {
        string res;
        long int temp;
        
        while (nums > 0)
        {
            temp = nums % 10;
            nums /= 10;
            res = res + char(temp + '0');
        }
        int j = res.size() - 1;
        string tem = "";
        for (int i = 0; i < res.size(); i ++)
        {
            tem = tem + res[j];
            j--;
        }
        return tem;

    }
};

2、分别对每一位进行运算,每一次运算都要记录下来余数和进位的数,方便进行下次计算。str[i + j + 1]是num1[j]和num2[i]相乘计算的那一位。

class Solution2
{
public:
    string multiply(string num1, string num2)
    {
        if (num1 == "0" || num2 == "0") return "0";
        int size1 = num1.size(), size2 = num2.size();
        string str(size1 + size2, '0');
        for (int i = size2 - 1; i >= 0; --i)
        {   
            int  AddNum = 0, LostNum = 0;
            for (int j = size1 - 1; j >= 0; --j)
            {
                int Temp1 =(num2[i] - '0')  * (num1[j] - '0') + AddNum;
                AddNum = Temp1 / 10;
                Temp1 = Temp1 % 10;
                int Temp2 = str[i + j + 1] - '0' + LostNum + Temp1;//对上一次的进位和这次的余数进行相加
                str[i + j + 1] = Temp2 % 10 + '0';
                LostNum = Temp2 / 10;
            }
            str[i] += LostNum + AddNum;
        }
        if (str[0] == '0')
        {
            str = str.substr(1, str.size());
        }
        return str;
    }
};

相关文章

  • LeetCode 43. 字符串相乘 | Python

    43. 字符串相乘 题目来源:力扣(LeetCode)https://leetcode-cn.com/proble...

  • 字符串乘法

    读完本文,你可以去力扣拿下如下题目: 43.字符串相乘[https://leetcode-cn.com/probl...

  • 43.字符串相乘

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

  • 43. 字符串相乘

  • 43. 字符串相乘

    1、思路   两数相乘时,乘数某位与被乘数某位相乘,所产生结果的位置是有规律的。具体规律如下:  乘数 num1 ...

  • 43. 字符串相乘

    自己解法 墨迹了两晚上,才写出来的字符串相乘,虽然写得很丑,还是记下来吧,至少思路是好理解的。基本就是从个位开始乘...

  • 43.字符串相乘

    题目描述: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们...

  • 43. 字符串相乘

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

  • 43. 字符串相乘

    #### [https://leetcode-cn.com/problems/multiply-strings]4...

  • LeetCode 43.字符串相乘

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

网友评论

      本文标题:43.字符串相乘

      本文链接:https://www.haomeiwen.com/subject/ezgmtqtx.html