zoukankan      html  css  js  c++  java
  • LeetCode: Multiply Strings. Java

    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.

    public class Solution {
        //模拟手算乘法
        public String multiply(String num1, String num2) {
            int n = num2.length();
            String[] addS = new String[n];
            for(int i = 0; i < n; i++){
                addS[i] = multiplyChar(num1, num2.charAt(i), n-1-i);
            }
            String res = sum(addS);
            int p = 0;
            while(p < res.length() && res.charAt(p) == '0')
            	p++;
            if(p == res.length())
            	return "0";
            else 
            	return res.substring(p);
        }
        
        public String multiplyChar(String num, char c, int digits){
            int n = num.length();
            char[] res = new char[n + 1];
            int add = 0;
            for(int i = n; i >= 0; i--){
                int b = 0;
                if(i-1 >= 0)
                    b = num.charAt(i-1)-'0';
                int cur = b*(c-'0')+add;
                add = cur / 10;
                cur %= 10;
                res[i] = (char)(cur+'0');
            }
            int p = 0;
            while(p <= n && res[p] == '0')
                p++;
            if(p == n + 1)
            	return "0";
            else{
                StringBuffer sb = new StringBuffer();
                for(int i = 0; i < digits; i++){
                    sb.append('0');
                }
            	return new String(res, p, n-p+1) + sb.toString();
            }
        }
        
        public String sum(String[] s){
            StringBuffer res= new StringBuffer();
            int p = 0;
            int cur = 0;
            int add = 0;
            int maxLength = 0;
            for(int i = 0; i < s.length; i++){
                maxLength = Math.max(maxLength, s[i].length());
            }
            do{
            	cur = 0;
                for(int i = 0; i < s.length; i++){
                    if(p < s[i].length())
                        cur += s[i].charAt(s[i].length()-1-p)-'0';
                }
                cur += add;
                res.append(cur%10);
                add = cur / 10;
                p++;
            }
            while(cur != 0 || p < maxLength);
            return new String(res.reverse());
        }
    }


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    机器学习公开课笔记第八周之推荐系统
    使用RT3070使开发板上网
    Linux及FL2440使用过程遇到的各种问题和小技巧
    学习 Git的使用过程
    Linux下Bash shell学习笔记
    MarkDown学习笔记
    STM32F407+STemwin学习笔记之STemwin移植补充Touch
    STM32F407+STemwin学习笔记之STemwin移植
    DXP常用的设置及快捷键
    第九届蓝桥杯-嵌入式比赛体会与备赛经验
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4710199.html
Copyright © 2011-2022 走看看