大数乘法,大数加法

 大数乘法

     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();
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值