本文共 3528 字,大约阅读时间需要 11 分钟。
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.
public class Solution { public static String multiply(String num1, String num2) { if(num1.equals("0") || num2.equals("0")) return "0"; if (hasSign(num1)) num1 = num1.substring(1); if (hasSign(num2)) num2 = num2.substring(1); StringBuilder sb = new StringBuilder(); int len_1 = num1.length(); int len_2 = num2.length(); int flag_mul =0; int tmp_1=0; if (len_1 <= len_2) { if (len_1 == 1) { int tmp = Integer.parseInt(num1); for (int i = 0; i < len_2; i++) { tmp_1 = Integer.parseInt(num2.substring(len_2-1-i,len_2-i)); tmp_1 = tmp* tmp_1; tmp_1 +=flag_mul; flag_mul = tmp_1 /10; tmp_1 = tmp_1%10; sb.append(tmp_1); } if(flag_mul != 0 ) sb.append(flag_mul); sb.reverse(); }else{ sb.append(0); for(int i=0;i0;j--){ sb.append(0); } String str_tmp_2 = StrAdd(str_tmp, sb.toString()); sb.setLength(0); sb.append(str_tmp_2); } } } else { if (len_2 == 1) { int tmp = Integer.parseInt(num2); for (int i = 0; i < len_1; i++) { tmp_1 = Integer.parseInt(num1.substring(len_1-1-i,len_1-i)); tmp_1 = tmp* tmp_1; tmp_1 +=flag_mul; flag_mul = tmp_1 /10; tmp_1 = tmp_1%10; sb.append(tmp_1); } if(flag_mul != 0 ) sb.append(flag_mul); sb.reverse(); }else{ sb.append(0); for(int i=0;i 0;j--){ sb.append(0); } String str_tmp_2 = StrAdd(str_tmp, sb.toString()); sb.setLength(0); sb.append(str_tmp_2); } } } return sb.toString(); } public static String StrAdd(String num1, String num2) { StringBuilder sb = new StringBuilder(); if (hasSign(num1)) num1 = num1.substring(1); if (hasSign(num2)) num2 = num2.substring(1); sb.setLength(0); int len_1 = num1.length(); int len_2 = num2.length(); boolean flag_add = false; int tmp = 0; if (len_1 <= len_2) { for (int i = 0; i < len_1; i++) { tmp = Integer .parseInt(num1.substring(len_1 - 1 - i, len_1 - i)) + Integer.parseInt(num2.substring(len_2 - 1 - i, len_2 - i)); if (flag_add == true) { tmp++; flag_add = false; } if (tmp >= 10) { tmp -= 10; flag_add = true; } sb.append(tmp); } for (int i = len_1; i < len_2; i++) { tmp = Integer .parseInt(num2.substring(len_2 - 1 - i, len_2 - i)); if (flag_add == true) { tmp++; flag_add = false; } if (tmp >= 10) { tmp -= 10; flag_add = true; } sb.append(tmp); } if (flag_add == true) { flag_add = false; sb.append(1); } } else { for (int i = 0; i < len_2; i++) { tmp = Integer .parseInt(num1.substring(len_1 - 1 - i, len_1 - i)) + Integer.parseInt(num2.substring(len_2 - 1 - i, len_2 - i)); if (flag_add == true) { tmp++; flag_add = false; } if (tmp >= 10) { tmp -= 10; flag_add = true; } sb.append(tmp); } for (int i = len_2; i < len_1; i++) { tmp = Integer .parseInt(num1.substring(len_1 - 1 - i, len_1 - i)); if (flag_add == true) { tmp++; flag_add = false; } if (tmp >= 10) { tmp -= 10; flag_add = true; } sb.append(tmp); } if (flag_add == true) { flag_add = false; sb.append(1); } } return sb.reverse().toString(); } public static boolean hasSign(String num) { if (num.charAt(0) == '-' || num.charAt(0) == '+') return true; else return false; }}
转载地址:http://yvuni.baihongyu.com/