zoukankan      html  css  js  c++  java
  • LeetCode

    43. Multiply Strings 

    Problem's Link

     ----------------------------------------------------------------------------

    Mean: 

    给定两个字符串,计算这两个字符串相乘的结果.

    analyse:

    模拟大数乘法.

    Time complexity: O(N)

     

    view code

    /**
    * -----------------------------------------------------------------
    * Copyright (c) 2016 crazyacking.All rights reserved.
    * -----------------------------------------------------------------
    *       Author: crazyacking
    *       Date  : 2016-03-06-17.13
    */
    #include <queue>
    #include <cstdio>
    #include <set>
    #include <string>
    #include <stack>
    #include <cmath>
    #include <climits>
    #include <map>
    #include <cstdlib>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <windows.h>
    #include <cstring>
    using namespace std;
    typedef long long(LL);
    typedef unsigned long long(ULL);
    const double eps(1e-8);

    class Solution
    {
    public:
       string multiply(string num1, string num2)
       {
           reverse(num1.begin(),num1.end());
           reverse(num2.begin(),num2.end());
           string res="0";
           int begin=0;
           for(int i=0;i<num2.length();++i)
           {
               string temp_res;
               str_num_multi(num1,num2[i]-'0',temp_res);
               add(res,temp_res,begin);
               begin++;
           }
           reverse(res.begin(),res.end());
           // delete leader zero
           while(res.size()>0 && res[0]=='0')
           {
               res.pop_back();
           }
           if(res.size()==0) res.push_back(char('0'));
           return res;
       }

       void str_num_multi(string str,int num,string& res)
       {
           int carry=0;
           for(int i=0;i<str.length();++i)
           {
               int now=num*(str[i]-'0')+carry;
               carry=now/10;
               now%=10;
               res.push_back(char(now+'0'));
           }
           if(carry)
               res.push_back(char(carry+'0'));
       }

       void add(string& res,string num,int begin)
       {
           int len=num.length(),carry=0,now;
           for(int i=0;i<len;++i)
           {
               if(begin<res.size())
                   now=(res[begin]-'0')+(num[i]-'0')+carry;
               else now=carry+(num[i]-'0');
               carry=now/10;
               now%=10;
               if(begin>=res.size())
                   res.push_back(char(now+'0'));
               else
                   res[begin]=now+'0';
               ++begin;
           }

           while(carry)
           {
               if(begin<res.size())
                   now=carry+(res[begin]-'0');
               else now=carry;
               carry=now/10;
               now%=10;
               if(begin>=res.size())
               {
                   res.push_back(char(now+'0'));
               }
               else
                   res[begin]=now+'0';
               ++begin;
           }
       }
    };

    int main()
    {
       string s1,s2;
       while(cin>>s1>>s2)
       {
           Solution solution;
           string ans=solution.multiply(s1,s2);
           cout<<ans<<endl;
       }
       return 0;
    }
    /*

    */
  • 相关阅读:
    基于云计算的电子政务网站群整合模式为政府创造新的价值
    新技术下的智慧政府门户网站群建设升级发展之路
    集团企业网站群建设发展趋势
    省级网站群建设
    区县网站群建设改版过程
    区县网站群建设重点
    高校网站群建设方案简介
    我县政府网站集群建设经验总结
    政府网站集群建设
    CMS发展趋势之开源、插件
  • 原文地址:https://www.cnblogs.com/crazyacking/p/5248220.html
Copyright © 2011-2022 走看看