高精度 & Java BigInteger用法 (蓝桥杯经典算法 大数阶乘 & 蓝桥杯练习系统 基础练习 阶乘计算)

蓝桥杯培训内部讲解(大数阶乘)

蓝桥杯算法教学与培训 蓝桥杯培训内部讲解(大数阶乘)

蓝桥杯练习系统 试题 基础练习 阶乘计算

一般思想

  阶乘结果极大,基本数据类型不足以容纳阶乘结果。

  首先考虑数组模拟人工运算,对数组各位模拟乘法和进位过程。

import java.util.*;
import java.math.*;

public class Main {
	public static void main(String[] args) {
		int a[]=new int[50000];
		int len=1,n;
		Scanner sc=new Scanner(System.in);
		n=sc.nextInt();
		a[1] = 1;
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= len; j++)//先按照十进制的各位计算。
				a[j] *= i;
			for (int j = 1; j <= len; j++)//处理各位上超过十进制表示值的数据进行进位模拟
			{
				if (a[i] < 10)
					continue;
				int pos = j;
				while (pos <= len)//len为当前数据的有效位数最高位
				{
					if (a[len] > 9)
						len++;
					a[pos + 1] += a[pos] / 10;
					a[pos] %= 10;
					pos++;
				}
			}
		}
		for (int i = len; i >= 1; i--)
			System.out.print(a[i]);
	}
}

利用java自带库BigInteger

关于BigInteger类

  java内部的高精度类。常用方法如下。

    <BigInteger>.add(<Object>);//相加
    <BigInteger>.subtract(<Object>);//相减
    <BigInteger>.multiply(<Object>);//乘法
    <BigInteger>.divide(<Object>);//除法
    <BigInteger>.remainder(<Object>);//取余
    <BigInteger>.pow(<Object>);//次方

  BigInteger的内部类是传值计算,类的内部方法并不改变该数据本身,而是返回计算结果。

相关试题

蓝桥杯练习系统 试题 基础练习 阶乘计算

import java.util.*;
import java.math.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		BigInteger n=sc.nextBigInteger();
		BigInteger ans=new BigInteger("1");
		BigInteger cc=new BigInteger("1");
		while(n.equals(cc)==false) {
			ans=ans.multiply(n);
			n=n.subtract(cc);
		}
		System.out.println(ans);
	}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值