zoukankan      html  css  js  c++  java
  • Leetcode: Multiply Strings

    题目

    大整数乘法

    思路:

    1. 转化成分组背包问题, 代码比较 tricky

    2. 将 string 相乘转化为 string 按位乘再加的过程

    3. 细节. 不同长度 string 相加可以先补 0, 对齐. 按位相乘的时候, 可以从左向右计算, 便于移位

    代码:

    class Solution {
    public:
        string multiply(string num1, string num2) {
    		if(num1.size() <= 0 || num2.size() <= 0)
    			return "";
    		if(num1.size() == 1 && num1[0] == '0')
    			return "0";
    		if(num2.size() == 1 && num2[0] == '0')
    			return "0";
    
    		if(num1.size() < num2.size()) {
    			swap(num1, num2);
    		}
    		string res;
    		for(int i = 0; i < num2.size(); i++) {
    			string party = oneBitMultipy(num1, num2[i]-'0');
    			res.push_back('0');
    			res = add(res, party);
    		}
    		return res;
        }
    
    	string add(string num1, string num2) {
    		string res = "";
    		int len1 = num1.size(), len2 = num2.size();
    		if(len1 < len2) {
    			res.append(num2.size()-num1.size(), '0').append(num1);
    			num1 = res;
    		}else if(len1 > len2) {
    			res.append(num1.size()-num2.size(), '0').append(num2);
    			num2 = res;
    		}
    
    		res.clear();
    		int leftover = 0, len = num1.size()-1;
    		int i;
    		for(i = 0; i < num1.size(); i ++) {
    			int tmp = leftover+num1[len-i]-'0'+num2[len-i]-'0';
    			res.push_back(tmp%10+'0');
    			leftover = tmp/10;
    		}
    		
    		if(leftover) {
    			res.push_back('0'+leftover);
    		}
    		reverse(res.begin(), res.end());
    		return res;
    	}
    
    	string oneBitMultipy(string num1, int bit) {
    		string res;
    		int leftover = 0;
    		for(int i = num1.size()-1; i >= 0; i--) {
    			int tmp = (num1[i]-'0')*bit + leftover;
    			res.push_back(tmp%10+'0');
    			leftover = tmp/10;
    		}
    		if(leftover) {
    			res.push_back(leftover+'0');
    		}
    		reverse(res.begin(), res.end());
    		return res;
    	}
    };
    

      

  • 相关阅读:
    队列与堆栈
    Python中的内置函数
    Centos 7 最小化部署svn版本控制(svn协议)
    Android中的一些简单的adb命令
    liunx服务程序的安装及配置
    liunx中安装包及其应用
    liunx网络基本命令
    liunx系统和其它的基本命令
    liunx用户管理的基本命令
    liunx的磁盘管理的基本命令
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3510935.html
Copyright © 2011-2022 走看看