题解 | #大数乘法#
大数乘法
https://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571
package test2;
/**
* 描述
* 以字符串的形式读入两个数字,
* 编写一个函数计算它们的乘积,以字符串形式返回。
*/
public class BigCheng {
public static void main(String[] args) {
BigCheng bigCheng = new BigCheng();
String solve = bigCheng.solve("111", "0");
System.out.println(solve);
}
public String solve (String s, String t) {
//1.判空
if("0".equals(s) | "0".equals(t)) //不短路判断
return "0";
if(s.length()==0 | t.length()==0)
return "0";
//2.先进行乘法然后累加
int res[] = new int[s.length()+t.length()];
for (int i = s.length()-1; i >=0 ; i--) {
for (int j = t.length()-1; j >=0 ; j--) {
//res[i+j+1]是为了将相应的位置数据相加
//即i+j =3 和res的最后一位下标差一个1
res[i+j+1]=res[i+j+1]+( (s.charAt(i)-'0') *(t.charAt(j)-'0') );
}
}
/* for (int re : res) {
System.out.print(re+ " ");
}*/
//3.然后处理进位
int up=0;
StringBuffer buffer = new StringBuffer();
for (int i = res.length-1; i >=0 ; i--) {
int temp = res[i]+up;
up = temp /10;
buffer.append(temp%10);
}
String s1 = buffer.reverse().toString();
//System.out.println(s1);
//去掉前面的0
if(s1.charAt(0)=='0'){
return s1.substring(1);
}else{
return s1;
}
}
}

查看1道真题和解析