• Multiply Strings


        字符串乘法,有两个字符串表示的正数a、b,求乘积c,也用字符串表示。涉及字符串乘法、字符串加法。

    class Solution 
    {
    private:
        char mul(char a, char b, char &carry)
        {
            int val = (a - '0') * (b - '0') + (carry - '0');
            
            carry = '0' + val / 10;
            return  '0' + val % 10;
        }
        
        char add(char a, char b, char &carry)
        {
            int val = (a - '0') + (b - '0') + (carry - '0');
            
            carry = '0' + val / 10;
            return  '0' + val % 10;
        }
        
        string addition(string num1, string num2)
        {
            string result(num1.size() > num2.size() ? num1.size() : num2.size(), '0');
            
            string::const_reverse_iterator ita = num1.rbegin();
            string::const_reverse_iterator itb = num2.rbegin();
            string::reverse_iterator itc = result.rbegin();
            char carry = '0';
            
            while (ita != num1.rend() || itb != num2.rend())
            {
                const char a = ita == num1.rend() ?  '0' : *ita++;
                const char b = itb == num2.rend() ? '0' : *itb++;
                *itc++ = add(a, b, carry);
            }
            
            return carry == '0' ? result : carry + result;
        }
     
    public:
        string multiply(string num1, string num2) 
        {
            if (num1 == "0" || num2 == "0") return "0";
            
            string lastNum;
            
            for (string::const_reverse_iterator ita = num2.rbegin();
                ita != num2.rend();
                ++ita)
            {
                string tmp(ita - num2.rbegin() + num1.size(), '0');
                string::reverse_iterator itc = tmp.rbegin() + (ita - num2.rbegin());
                char carry = '0';
                
                for (string::const_reverse_iterator itb = num1.rbegin();
                    itb != num1.rend();
                    ++itb)
                {
                    *itc++ = mul(*ita, *itb, carry);
                }
                
                if (carry != '0')
                {
                    tmp = carry + tmp;
                }
                
                lastNum = addition(lastNum, tmp);
            }
            
            return lastNum;
        }
    };
  • 相关阅读:
    pythonGUI-wxpython
    [转]谈谈 Mifare Classic 破解
    python-optparse模块给脚本增加参数选项
    [笔记]python
    mac伪装工具macchanger
    mitmproxy
    yersinia的DHCP池耗尽断网攻击
    kalilinux工具中文在线
    MSF内网渗透 扫描模块
    渗透测试的一些总结
  • 原文地址:https://www.cnblogs.com/codingmylife/p/2705518.html
Copyright © 2020-2023  润新知