大数乘法
public static void main(String[] args) {
// int i = MaxChildArrayOrder(new int[]{3,1,4,1,5,9,2,6,5});
String rs=multiply2("2001","12");
System.out.println("result:"+rs);
}
public static String multiply2(String num1, String num2) {
int m = num1.length(), n = num2.length();
int[] pos = new int[m + n];
for(int i = m - 1; i >= 0; i--) {
for(int j = n - 1; j >= 0; j--) {
int mul = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
int p1 = i + j, p2 = i + j + 1;
int sum = mul + pos[p2];
pos[p1] += sum / 10;
pos[p2] = (sum) % 10;
}
}
StringBuilder sb = new StringBuilder();
for(int p : pos)
if(!(sb.length() == 0 && p == 0))
sb.append(p);
return sb.length() == 0 ? "0" : sb.toString();
}
整数阶乘(用到大数乘法)
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String multiValue = "1";
for(int i = 2;i<=num;i++){
multiValue = multity(String.valueOf(i),multiValue);
}
System.out.println(multiValue);
}
public static String multity(String str1,String str2){
StringBuilder sb = new StringBuilder();
int[] pos = new int[str1.length()+str2.length()];
for(int i = str1.length()-1;i>=0;i--){
for(int j = str2.length()-1;j>=0;j--){
int p1 = i+j,p2 = i+j+1;
int mul = (str1.charAt(i)-'0')*(str2.charAt(j)-'0');
int sum = mul+pos[p2];
pos[p1] += sum/10;
pos[p2]=sum%10;
}
}
for(int c :pos){
if(!(c==0&sb.length()==0)){
sb.append(c);
}
}
return sb.length() == 0 ? "0" : sb.toString();
}
}
大数加法
public static String add(String str1,String str2){
if(str1==null||"".equals(str1)){
return str2;
}
if(str2==null||"".equals(str2)){
return str1;
}
char[] arr1 = str1.toCharArray();
char[] arr2 = str2.toCharArray();
int i = arr1.length-1,j = arr2.length-1;
boolean carry = false;
StringBuffer sb = new StringBuffer("");
while (i>=0&&j>=0){
int sum = arr1[i]-'0'+arr2[j]-'0';
sum = carry?sum+1:sum;
sb.append(sum%10);
carry=sum>10?true:false;
i--;
j--;
}
while (carry||i>=0||j>=0){
if(i>=0){
int sum = carry?arr1[i]-'0'+1:arr1[i]-'0';
sb.append(sum%10);
carry=sum>10?true:false;
i--;
}else if(j>=0){
int sum = carry?arr2[i]-'0'+1:arr2[i]-'0';
sb.append(sum%10);
carry=sum>10?true:false;
j--;
}else {
if(carry){
sb.append("1");
carry=false;
}
}
}
return sb.reverse().toString();
}