Leetcode:Multiply Strings

来源:互联网 发布:java架构师岗位职责 编辑:程序博客网 时间:2024/06/05 09:04

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 {public:    string multiply(string num1, string num2) {        string result;        int carry = 0;        if(num1.size()==1&&num1[0]=='0'||num2.size()==1&&num2[0]=='0')            return "0";        for(int i = 1 ; i < num1.size()+num2.size(); ++i)        {            int sum = carry;            for(int j = 1 ; j <= num1.size(); ++j)            {                if(i+1-j>=1&&i+1-j<=num2.size())                    sum += (num1[num1.size()-j]-'0')*(num2[num2.size()-1-i+j]-'0');            }            carry = sum/10;            result.insert(result.begin(),sum%10+'0');        }        if(carry>0)             result.insert(result.begin(),carry+'0');        return result;    }}; 
java版:

public class Solution {    public String multiply(String num1, String num2) {        if (num1 == null || num2 == null) {            return null;        }                int len1 = num1.length(), len2 = num2.length();        int len3 = len1 + len2;        int i, j, product, carry;        int[] num3 = new int[len3];        for (i = len1 - 1; i >= 0; i--) {            carry = 0;            for (j = len2 - 1; j >= 0; j--) {                product = carry + num3[i + j + 1] +                    Character.getNumericValue(num1.charAt(i)) *                    Character.getNumericValue(num2.charAt(j));                num3[i + j + 1] = product % 10;                carry = product / 10;            }            num3[i + j + 1] = carry;        }        StringBuilder sb = new StringBuilder();        i = 0;        while (i < len3 - 1 && num3[i] == 0) {            i++;        }        while (i < len3) {            sb.append(num3[i++]);        }        return sb.toString();    }}



0 0
原创粉丝点击