• LeetCode(43)Multiply Strings


    题目

    Given two numbers represented as strings, return multiplication of the numbers as a string.

    Note: The numbers can be arbitrarily large and are non-negative.

    分析

    计算两个字符串表示的非负大整数的乘积,结果仍然用字符串表示。

    我们都熟悉笔算的整数乘积,按照被乘数逐位与乘数求积,保存进位;当被乘数换位时,结果递增一个数量级,与先前结果求和。

        123
            *
        456
    ————————————
        738
       615
      492
    ————————————
    56088

    如上例所示,当我们计算字符串“123”*“456”时,采取与笔算相同的思想,按照从个位—>高位的计算思想,现将字符串翻转,计算完成后,翻转结果,返回。

    AC代码

    class Solution {
    public:
        string multiply(string num1, string num2) {
            //如果有其中一个乘数的字符串表示为空,则返回空字符串
            if (num1.empty() || num2.empty())
                return string();
    
            if (num1 == "0" || num2 == "0")
                return "0";
    
            //按照整数从低位到高位计算,翻转两个乘数字符串
            reverse(num1.begin(), num1.end());
            reverse(num2.begin(), num2.end());
            //求两个乘数字符串的长度
            int len1 = strlen(num1.c_str()), len2 = strlen(num2.c_str());
    
            //定义乘法结果字符串
            string ret = "";
            //保存进位
            int carry = 0; 
    
            for (int i = 0; i < len1; i++)
            {
                //乘数的处理起始位
                size_t pos = i;
                for (int j = 0; j < len2; j++)
                {
                    int temp = (num1[i] - '0') * (num2[j] - '0') + carry;
    
                    //向当前位加入结果
                    if (pos < ret.length())
                    {
                        temp = temp + (ret[pos] - '0');
                        ret[pos] = temp % 10 + '0';
                    }//if
                    else{
                        ret.append(1, temp % 10 + '0');
                    }//else
                    //计算下一个进位
                    carry = temp / 10;
                    //处理乘数的下一位
                    pos++;
                }//for
                if (carry > 0)
                    ret.append(1, carry + '0');
                carry = 0;
            }//for
    
            //翻转整个结果字符串
            reverse(ret.begin(), ret.end());
            return ret;
    
        }
    };

    GitHub测试程序源码

  • 相关阅读:
    性能测试总结(三)--工具选型篇
    什么是性能瓶颈
    基于Linux服务器的性能分析与优化
    常见的APP性能测试指标
    性能测试方案设计的方法和思路
    测试渐进式
    Selenium2Library关键字
    互联网运营工作四大内容
    RF学习过程中遇到的问题
    Robot Framework自动化测试环境的搭建
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214892.html
Copyright © 2020-2023  润新知