第53题 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.

Hide Tags
  Math String





Solution in Java:
public class Solution {
    public String multiply(String num1, String num2) {
        //String result = "";
        int carry = 0;
        char[] result  = new char[num1.length()+num2.length()];
        for(int n=0; n<result.length; n++){
            result[n] = '0';<span style="white-space:pre">	</span>//initialize is necessary to compute the result
        }
        for(int i=0; i<num1.length(); i++){
            int val1 = num1.charAt(num1.length()-1-i)-'0'; //need to reverse the index of string
            carry=0;<span style="white-space:pre">	</span>//for each outer loop, initialize the value of carry
            for(int j=0; j<num2.length(); j++){
               int digi = i+j;
               int val2 = num2.charAt(num2.length()-1-j)-'0'; //need to reverse the index of string
               int sum = val1*val2+carry;
               
               int exist = result[result.length-1-digi]-'0';
               sum = sum+exist;
               int cur = sum%10;
               carry = sum/10;
               result[result.length-1-digi] = (char)(cur+'0');
             }
<span style="white-space:pre">	</span>     //check if the highest digit has carry. If it is, continue to compute 
             int index = num2.length() + i;
             while(carry!=0){
                 int cur = (result[result.length-1-index]-'0' + carry)%10;
                 result[result.length-1-index] = (char)(cur+'0');
                 index++;
                 carry = cur/10;
             }
        }
<span style="white-space:pre">	</span>//omit the '0' from the high digits
        int n=0;
        while(n<result.length&&result[n]=='0') n++;
        if(n==result.length)    return "0";
        String res = String.valueOf(result);
        return res.substring(n);
         
    }
}

Note:
1. 就是所谓的大数乘法,用字符串表示数字
2. 因为在计算的过程中需要修改字符串相应位置的字符,用字符串不好操作,所以暂用char array储存结果,因为长为n1的str1与长为n2的str2相乘,其最高位为n1+n2, 所以char array大小为n1+n2。
3. 将两个字符串一位一位相乘,采用双循环,记下每次的进位数,每一位的结果要加上该位的进位数和该位已存在于result数组中的结果。
4. 每次内循环结束后,需要查看最高位上是否有进位,如果则要一直往上加。
5. 对于最终的结果,需要从高位到低位查看是否为‘0’,即将高位的‘0’消去,如果全为0,则结果为0。
6. 因为字符串的储存顺序是从高位到低位,所以遍历时要重新计算index,因为计算时顺序为从低位到高位。
7. int转换为char:(char)(i+‘0’) char转换为int:chr-'0'
    String转换为char[]; str.toCharArray();  char[]转换为String:String.valueOf(char[])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值