zoukankan      html  css  js  c++  java
  • 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.

     1 public class Solution {
     2     public String multiply(String num1, String num2) {
     3         // Start typing your Java solution below
     4         // DO NOT write main() function
     5         String large = null;
     6         String small = null;
     7         if(num1.length() > num2.length()){
     8             large = num1;
     9             small = num2;
    10         }else{
    11             large = num2;
    12             small = num1;
    13         }
    14         if(num1.equals("0") || num2.equals("0")){
    15             return "0";
    16         }
    17         StringBuffer result = new StringBuffer();
    18         int carry = 0;
    19         for(int l = large.length() + small.length() - 2; l > -1; l --){
    20             int sum = carry;
    21             for(int j = small.length() - 1; j > -1; j --){
    22                 int i = l - j;
    23                 if(i < large.length() && i > -1){
    24                     sum += (large.charAt(i) - '0') * (small.charAt(j) - '0');
    25                 }
    26             }
    27             carry = sum / 10;
    28             result.insert(0,sum % 10);
    29         }
    30         if(carry != 0){
    31             result.insert(0,carry);
    32         }
    33         return result.toString();
    34     }   
    35 }

     第二遍:

    利用array 可以简化运算!

     1 public class Solution {
     2     public String multiply(String num1, String num2) {
     3         // Start typing your Java solution below
     4         // DO NOT write main() function
     5         if ( num1.equals("0") || num2.equals("0") ) return "0";
     6         int n1=num1.length(), n2 = num2.length();
     7         int[] c = new int[n1 + n2];
     8         for (int i = n1 - 1; i > -1; i--){
     9             for (int j = n2 - 1; j > -1; j--){
    10                 c[i + j + 1] += (num1.charAt(i)-'0')*(num2.charAt(j)-'0');
    11             }
    12         }
    13         for (int o=n1 + n2 - 1; o > 0; o --){
    14             c[o - 1] += c[o]/10;
    15             c[o] %= 10;
    16         }
    17         int bit = 0;
    18         if(c[0] == 0) bit = 1;
    19         StringBuffer ret = new StringBuffer();
    20         for (int i=bit; i < n1 + n2; i ++)
    21             ret.append(c[i]);
    22         return ret.toString();
    23     }   
    24 }

     第三遍:

     1 public class Solution {
     2     public String multiply(String num1, String num2) {
     3         if(num1.equals("0") || num2.equals("0")) return "0";
     4         int len1 = num1.length(), len2 = num2.length();
     5         int[] result = new int[len1 + len2 - 1];
     6         for(int i = 0; i < len1; i ++){
     7             for(int j = 0; j < len2; j ++){
     8                 result[i + j] += (num1.charAt(len1 - 1 - i) - '0') * (num2.charAt(len2 - 1 - j) - '0');
     9             }
    10         }
    11         int upp = 0;
    12         StringBuilder sb = new StringBuilder();
    13         for(int i = 0; i < result.length; i ++){
    14             int sum = result[i] + upp;
    15             sb.insert(0, sum % 10);
    16             upp = sum / 10;
    17         }
    18         if(upp != 0) sb.insert(0, upp);
    19         return sb.toString();
    20     }
    21 }
  • 相关阅读:
    linux常用命令笔记
    head first html与css
    多线程编程核心技术日记
    nio
    排序算法
    随笔
    数据库读写分离
    购物网站设计
    http
    servlet初始化
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3340074.html
Copyright © 2011-2022 走看看