• 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());
        }
    }


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

  • 相关阅读:
    Nginx的Mainline version、Stable version、Legacy version的版本区别
    十个程序员必备的网站推荐
    各大OJ题目分类
    ubuntu 12 安装bcm 43142无线网卡驱动
    unp.h
    Linux优秀软件整理
    陈皓一起写Makefile 概述
    开源资源目录
    (三)鸟哥Linux读书笔记
    CSS3实现选项卡
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4710199.html
Copyright © 2020-2023  润新知