(C++)字符串相乘

 个人主页:Lei宝啊 

愿所有美好如期而遇


题目链接如下: 

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode-cn.com/problems/multiply-strings/description/

题目

(C++)字符串相乘_第1张图片

思路

我们首先不能将字符串全部转换为数字,因为存储不下,而且注意也不允许,所以我们应该想到用一个字符串尾部的单位乘一个字符串,然后存储得到的字符串,再由尾部的倒数第二位乘,再存储结果字符串,并且根据位数在结果字符串后补0,最终得到的所有结果字符串相加,就是我们的答案。

字符串相加:(C++)字符串相加

图解 

(C++)字符串相乘_第2张图片

代码

string multiply(string num1, string num2) 
    {
        if(num1 == "0" || num2 == "0")
        {
            return "0";
        }

        int s1 = num1.size();
        int s2 = num2.size();

        if(s1 > s2)
        {
            num1.swap(num2);
            s1 = num1.size();
            s2 = num2.size();
        }

        int count = 0;
        string s[201];
        for(int i=s1-1; i>=0; i--)
        {

            int ch1 = num1[i] - 48;
            int add = 0;

            for(int j=s2-1; j>=0; j--)
            {
                int ch2 = num2[j] - 48;
                s[i] += ch2 * ch1 % 10 + 48 + add;
                add = ch2 * ch1 / 10;     
            }
            if(add > 0)
            {
                s[i] += add + 48;
            }
            reverse(s[i].begin(),s[i].end());

            for(int k=0; k
string addStrings(string num1, string num2) 
    {
        string result;
        int next = 0;
 
        char tmp1 = 0;
        char tmp2 = 0;
 
        while(!num1.empty() || !num2.empty())
        {
            if(!num1.empty())
                tmp1 = num1[num1.size()-1] - 48;
            else
                tmp1 = 0;
 
            if(!num2.empty())
                tmp2 = num2[num2.size()-1] - 48;
            else
                tmp2 = 0;
 
            int sum = tmp1 + tmp2 + next;
            next = sum / 10;
            sum %= 10;
 
            result += (sum+48);
 
            if(!num1.empty())
                num1.erase(num1.end()-1);
            if(!num2.empty())
                num2.erase(num2.end()-1);
        }
 
        if(next > 0)
            result += '1';
 
        reverse(result.begin(),result.end());
        return result;
    }   

你可能感兴趣的:(刷题)