大数相乘 java

时间:2023-03-09 16:00:37
大数相乘 java
<pre name="code" class="java">package bigMultiply;

import java.math.BigInteger;
/**
* 大數相乘
* @author root
*
*/
public class MyMultiply1 { /**
* @param args
*/
public static void main(String[] args) {
String str1 = "23456789009877666555544444";
String str2 = "346587436598437594375943875943875"; String result = multiply(str1, str2);
String result1 = multiply1(str1, str2); System.out.println("乘数:"+str1);
System.out.println("乘数:"+str2);
System.out.println("结果:"+result);
System.out.println("结果:"+result1);
} private static String multiply1(String str1, String str2){
BigInteger bigInteger1=new BigInteger(str1);
BigInteger bigInteger2=new BigInteger(str2);
//multiplay
bigInteger1=bigInteger1.multiply(bigInteger2);
return bigInteger1.toString();
} public static String multiply(String str1, String str2) {
//判断符号
char flag1;
char flag2;
char flag;
if(str1.charAt(0)=='-'){
flag1 = '-';
str1 = str1.substring(1);
}else if(str1.charAt(0)=='+'){
flag1 = '+';
str1 = str1.substring(1);
}else{
flag1 = '+';
}
if(str2.charAt(0)=='-'){
flag2 = '-';
str2 = str2.substring(1);
}else if(str2.charAt(0)=='+'){
flag2 = '+';
str2 = str2.substring(1);
}else{
flag2 = '+';
}
if(flag1==flag2){
flag = '+';
}else{
flag = '-';
}
// 两数乘积位数不会超过乘数位数和+ 3位
char [] s1 = new StringBuffer(str1).reverse().toString().toCharArray();
char [] s2 = new StringBuffer(str2).reverse().toString().toCharArray(); int [] result = new int[str1.length()+str2.length()+3];
//逐位相乘
for(int i=0; i<s1.length; i++){
for(int j=0; j<s2.length; j++){
result[i+j]+= (s1[i]-'0')*(s2[j]-'0');
}
}
//进位
for(int i=0; i<result.length-1; i++){
result[i+1]+=result[i]/10;
result[i] = result[i]%10;
}
//输出
boolean start = false;
StringBuilder sb = new StringBuilder();
sb.append(flag);
for(int i=result.length-1; i>=0; i--){
if(result[i]!=0){
start=true;
}
if(start){
sb.append(result[i]);
}
}
return sb.toString();
}
}