题目描述:
给定两个String,为超过long可表示范围
思路分析:
略。同大数相加
代码:
public class BigNumberMul {
String mul(String num1 , String num2){
int[] num1_int;
int[] num2_int;
if (num1.length() >= num2.length() )
{
num1_int = new int[num1.length()];//长
num2_int = new int[num2.length()];//短
//转为int数组
for (int i = 0; i < num1_int.length; i++) {
num1_int[i] = num1.charAt(i) - '0';
}
for (int i = 0; i < num2_int.length; i++) {
num2_int[i] = num2.charAt(i) - '0';
}
}else {
num2_int = new int[num1.length()];
num1_int = new int[num2.length()];//长
//转为int数组
for (int i = 0; i < num1_int.length; i++) {
num1_int[i] = num2.charAt(i) - '0';
}
for (int i = 0; i < num2_int.length; i++) {
num2_int[i] = num1.charAt(i) - '0';
}
}
//乘法计算
int[] result = new int[num1_int.length+num2_int.length];
//末尾对齐
for (int i = num1_int.length - 1; i >= 0; i --) {
for (int j = num2_int.length - 1; j >= 0 ; j --) {
result[num1_int.length-1-i+num2_int.length-1-j] += num1_int[i] * num2_int[j];
}
}
//处理超过10的
for (int i = 0; i < result.length; i++) {
if (result[i] > 9)
{
int n =result[i] / 10;
result[i+1] = n + result[i+1];
result[i] %= 10;
}
}
//result本来是从后往前的,反转
StringBuffer stringBuffer =new StringBuffer();
for (int i = result.length-1; i >= 0; i--) {
if (result[result.length-1] == 0)
{
//出现首位为0,跳过
continue;
}
stringBuffer.append(result[i]);
}
return stringBuffer.toString();
}
String bigMul(String num1,String num2)
{
BigInteger num1_big = new BigInteger(num1);
BigInteger num2_big = new BigInteger(num2);
BigInteger multiply = num1_big.multiply(num2_big);
return multiply.toString();
}
public static void main(String[] args) {
System.out.print("预期结果:");
String s = new BigNumberMul().bigMul("23423423", "823423424");
System.out.println(s);
String mul = new BigNumberMul().mul("23423423", "823423424");
System.out.println("最终结果:"+mul);
}
}