• 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.

    要求:字符串表示的数字可能无穷大,并且非负。

    class Solution {
    private:
        vector<string> tempStrs;
    public:
        string add(string num1,string num2)
        {
            int n1=num1.size();
            int n2=num2.size();
            int i=n1-1;int j=n2-1;
            string resStr;
            int jinwei=0;
            while (i>=0&&j>=0)
            {
                int temp=(num1[i]-'0')+(num2[j]-'0')+jinwei;
                jinwei=temp>=10?1:0;
                temp%=10;
                resStr.push_back(temp+'0');
                --i;
                --j;
            }
            if(i>=0){
                while (i>=0)
                {
                    int temp=(num1[i]-'0')+jinwei;
                    jinwei=temp>=10?1:0;
                    temp%=10;
                    resStr.push_back(temp+'0');
                    --i;
                }
            }
            else if(j>=0){
                while (j>=0)
                {
                    int temp=(num2[j]-'0')+jinwei;
                    jinwei=temp>=10?1:0;
                    temp%=10;
                    resStr.push_back(temp+'0');
                    --j;
                }
            }
            if(jinwei!=0){
                resStr.push_back(jinwei+'0');
            }
            reverse(resStr.begin(),resStr.end());
            return resStr;
        }
        string multiply(string num1, string num2) {
            if(num1.empty()||num2.empty()) return "";
            if(num1=="0"||num2=="0") return "0";
            int jinwei=0;
            int n1=num1.size();
            int n2=num2.size();
            if(n2>n1){
                string temp=num1;
                num1=num2;
                num2=temp;
                n1=num1.size();
                n2=num2.size();
            }
            int time=0;
            string tempStr;
            string res;
            for(int i=n2-1;i>=0;--i)
            {
                tempStr.clear();
                jinwei=0;
                for(int j=n1-1;j>=0;--j)
                {
                    int temp=(num1[j]-'0')*(num2[i]-'0')+jinwei;
                    jinwei=temp>=10?(temp/10):0;
                    temp=temp%10;
                    tempStr.push_back(temp+'0');
                }
                if(jinwei!=0){
                    tempStr.push_back(jinwei+'0');
                }
                reverse(tempStr.begin(),tempStr.end());
                for(int q=0;q<time;++q){
                    tempStr.push_back('0');
                }
                tempStrs.push_back(tempStr);
                ++time;
            }
             if(tempStrs.size()>1){
                res=add(tempStrs[0],tempStrs[1]);
                for (int i=2;i<tempStrs.size();++i)
                {
                    res=add(res,tempStrs[i]);
                }
                return res;
            }else
            {
                return tempStrs[0];
            }
    
        }
    };
  • 相关阅读:
    备胎的养成记KeepAlived实现热备负载
    入坑系列之HAProxy负载均衡
    将Error异常日志从普通日志中剥离
    一步一步在Windows中使用MyCat负载均衡 下篇
    年终的第一篇总结 结束南漂 写在2017
    Android实现TCP断点上传,后台C#服务实现接收
    为什么我会反对大家写工作日报
    ANSI C、ISO C、Standard C联系与区别
    c、c++ char*和wchar*互相转换
    宽字符与Unicode (c语言 汉语字符串长度)
  • 原文地址:https://www.cnblogs.com/fightformylife/p/4118381.html
Copyright © 2020-2023  润新知