java大数以及阶乘之和

7 篇文章 0 订阅

java大数常用方法

package com.chen.lanqiaobei;
import java.math.*;
import java.util.Scanner;

/**
 * Created by 一只爱吃萝卜的小兔子 on 2021/11/17 19:58
 */
public class Main {
    static BigInteger a, b, c, mod;//java没有全局变量,如果要用的话就在这里写成 静态变量

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //整型 大数
        a = new BigInteger("12345678900000000000000000000000000000000");
        b = BigInteger.valueOf(987654321);// BigInteger.valueOf(超过int类型的要在末尾加'L',并且不能超过Long类型的范围)
        //加减乘除
        c = a.add(b);
        System.out.println("     add()加法:" + c);
        c = a.subtract(b);
        System.out.println("subtract()减法:" + c);
        c = a.multiply(b);
        System.out.println("multiply()乘法:" + c);
        c = a.divide(b);
        System.out.println("  divide()除法:" + c);

        //取余
        c = a.mod(b);
        System.out.println("     mod()取余:" + c);

        //最大公因数
        c = a.gcd(b);
        System.out.println("gcd()最大公因数:" + c);

        //min max 求最值
        c = a.min(b);
        System.out.println("   min()较小值:" + c);
        c = a.max(b);
        System.out.println("   max()较大值:" + c);

        //指数pow(int)
        c = a.pow(2);
        System.out.println(c);

        //指数b后在取余mod
//        a = BigInteger.valueOf(3);
//        b = BigInteger.valueOf(2);
//        mod = BigInteger.valueOf(4);
//        c = a.modPow(b,mod);
//        System.out.println(c);

        //比较大小
        int res;
        System.out.println(a);
        System.out.println(b);
        res = a.compareTo(b);
        System.out.println("compareTo()比较");
        System.out.println("大于:1  等于:0  小于:-1");
        System.out.println("a.compareTo(b):" + res);
        res = a.compareTo(a);
        System.out.println("a.compareTo(a):" + res);
        res = b.compareTo(a);
        System.out.println("b.compareTo(a):" + res);

        //进制转换
        a = new BigInteger("1111", 2);//将2进制数1111转化10进制
        System.out.println("2进制数的1111转化为十进制是:" + a);

        //类型转化 BigDecimal -> BigInteger
        BigDecimal b = new BigDecimal("123.123");
        System.out.println("BigDecimal:" + b);
        System.out.println("BigDecimal-> BigInteger:" + b.toBigInteger());

        //输入
//        String t = in.next();
//        a = new BigInteger(t);
//        t = in.next();
//        b = new BigDecimal(t);
//        System.out.println("输入的第一个字符串转化为BigInteger:" + a);
//        System.out.println("输入的第一个字符串转化为BigDecimal:" + b);
        System.out.println();
        System.out.println();
        System.out.println();
        System.out.println("BigDecimal");

        BigDecimal h, i, c;//java没有全局变量,如果要用的话就在这里写成 静态变量
        //整型 大数
        h = new BigDecimal("123456789.123456789");
        i = BigDecimal.valueOf(123.121);
        //加减乘除
        c = h.add(i);
        System.out.println("     add()加法:" + c);
        c = h.subtract(i);
        System.out.println("subtract()减法:" + c);
        c = h.multiply(i);
        System.out.println("multiply()乘法:" + c);
        c = h.divide(i, 2, RoundingMode.UP);//2是精度,RoundingMode.UP是round模式
        System.out.println("  divide()除法:" + c);

        //min max 求最值
        c = h.min(i);
        System.out.println("   min()较小值:" + c);
        c = h.max(i);
        System.out.println("   max()较大值:" + c);

        //指数pow(int)
        c = i.pow(2);
        System.out.println("          指数:" + c);

        //比较大小
        System.out.println(h);
        System.out.println(i);
        res = h.compareTo(i);
        System.out.println("compareTo()比较");
        System.out.println("大于:1  等于:0  小于:-1");
        System.out.println("h.compareTo(i):" + res);
        res = h.compareTo(h);
        System.out.println("h.compareTo(h):" + res);
        res = i.compareTo(h);
        System.out.println("i.compareTo(h):" + res);
    }
}

题目:阶乘之和

java大数阶乘和1

import java.math.BigInteger;
import java.util.Scanner;

/**
 * Created by 一只爱吃萝卜的小兔子 on 2021/11/21 21:24
 */
public class Main {
    private static BigInteger res = BigInteger.valueOf(0);//存储最后结果
    private static BigInteger t1;//代替i进行循环

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int t = in.nextInt();
        BigInteger n = BigInteger.valueOf(t);
        for (int i = 1; i <= t; i++) {
            t1 = BigInteger.valueOf(i);
            res = res.add(fac1(t1));
        }

        System.out.println(res);
    }

    private static BigInteger fac1(BigInteger n) {
        if (n.compareTo(BigInteger.valueOf(0)) == -1)//<0 没有意义
            return BigInteger.valueOf(-1);
        if (n.compareTo(BigInteger.valueOf(0)) == 0)//==0
            return BigInteger.valueOf(1);
        t1 = n.subtract(BigInteger.valueOf(1));//>0
        return n.multiply(fac1(t1));
    }
}

java大数阶乘和2

import java.math.BigInteger;
import java.util.Scanner;

/**
 * Created by 一只爱吃萝卜的小兔子 on 2021/11/21 21:24
 */
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int t = in.nextInt();
        BigInteger n = BigInteger.valueOf(t);
        BigInteger ans = BigInteger.valueOf(0);
        for (BigInteger i = BigInteger.valueOf(1); i.compareTo(n) != 1; i = i.add(BigInteger.valueOf(1))) {
            ans=ans.add(fac(i));
        }
        System.out.println(ans);
    }

    private static BigInteger fac(BigInteger n) {
        BigInteger a1 = new BigInteger("1");
        BigInteger a2 = new BigInteger("2");
        BigInteger res = BigInteger.valueOf(1);
        if (n.compareTo(a1) == 0 || n.compareTo(BigInteger.valueOf(0)) == 0) {
            return BigInteger.valueOf(1);
        } else if (n.compareTo(BigInteger.valueOf(0)) == -1) {
            return BigInteger.valueOf(-1);
        }
        while (n.compareTo(a1) > 0) {
            res = res.multiply(n.multiply(n.subtract(a1)));
            n = n.subtract(a2);
        }
        return res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值