2019华为勇敢星实习计划——第三题
解题思路:按照乘法规则AB*CD = AC (BC+AD) BD , 然后从后到前满十进位(AC,(BC+AD),BD)
package BiShiTi;
import java.util.Scanner;
public class m_0018 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
String A = scan.nextLine();
String B = scan.nextLine();
String result = Multiply(A, B);
System.out.println(result);
}
}
/**
* 大数相乘基本思想:按照乘法规则AB*CD = AC (BC+AD) BD , 然后从后到前满十进位(AC,(BC+AD),BD)
*/
public static String Multiply(String A, String B) {
String n1 = new StringBuffer(A).reverse().toString();
String n2 = new StringBuffer(B).reverse().toString();
int [] m = new int [n1.length() + n2.length()];
for(int i = 0; i < n1.length(); i ++){
for (int j = 0; j < n2.length(); j++) {
m[i+j] += (n1.charAt(i)-'0')*(n2.charAt(j)-'0');
}
}
StringBuffer r = new StringBuffer();
for (int i = 0; i < m.length; i++) {
int mod = m[i] % 10;
int carry = m[i] / 10;
if (i+1< m.length) {
m[i+1]+= carry;
}
r.insert(0, mod);
}
while(r.charAt(0) == '0' && r.length() >= 1){
r.deleteCharAt(0);
}
return r.toString();
}
}