2018年全国多校算法寒假训练营练习比赛(第三场)E---进击吧!阶乘(Java代码,另附Java解决大数问题的模板)

链接: https://www.nowcoder.net/acm/contest/75/E
来源:牛客网

题目描述

给定一个整数N(0≤N≤10000),求取N的阶乘

输入描述:

多个测试数据,每个测试数据输入一个数N

输出描述:

每组用一行输出N的阶乘

首先说下,因为大数类型的问题处理起来比较麻烦。所以我就偷个懒,直接调用Java中的类来轻松解决这些问题,这里推荐使用Java中的大浮点数类,因为大整数可以按照大浮点数处理(就像int型变量可以按照float类型的变量处理一样,但是反过来处理是不行的,会丢失小数点后面的值)。
注意:这里只能轻松解决大数相加减和乘的问题,如果除的话还是需要自己写方法的。
先看下我解决这道题的Java代码:

import java.util.Scanner;//调用输入类
import java.math.BigDecimal;//调用大浮点型类 ,相当于C的文件头吧,把那个类中的代码导入到我们写的这个文件中
public class Main
{
public static void main(String[] args) 
{
Scanner in=new Scanner(System.in);//(定义一个输入类型的对象,接下来可以用这个对象进行输入)
BigDecimal b1,b2,n,i;//新建几个大整数类的变量
while(in.hasNext())//多组实例测试
{
n=in.nextBigDecimal();//把输入的数存在n中
i=new BigDecimal(1);//这个意思就是把一个数值为1的大浮点型的数赋值给i(注意前面的new)
b2=b1=i;//这个就不介绍了吧,把i的值给b1,再把b1的值给b2
while(i.compareTo(n) <= 0) //返回值为0代表相等,为1代表i比n大,返回值为-1代表i比n小
{
b1=b1.multiply(i);//相乘
i=i.add(b2);//i自加1,b2的值为1,从来没变过
}
System.out.println(b1);//输出阶乘的结果
}
}
}


以下是模板
import java.math.BigInteger;//注意这里不是大浮点型的哈,使用时最好改成大附点型的,因为大整数型的变量可以按大浮点型的进行计算,
//可能就是比较浪费时间而已,import java.math.BigDecimal;//调用大浮点型类 ,相当于C的文件头吧,把那个类中的代码导入到我们写的这个文件中
import java.util.Scanner;//调用输入类
public class Main
{
public static void main(String[] args) 
{
Scanner in=new Scanner(System.in);//(定义一个输入类型的对象,接下来可以用这个对象进行输入)
System.out.println("请输入您要计算的次数:");
int n=in.nextInt();//输入n
System.out.println("系统检测到您的输入为:"+n+"\n接下来请输入每次参与运算的两个大整数");
for(int i=1;i<=n;i++)
{
BigInteger bigint1=in.nextBigInteger();//输入第一个大整数
BigInteger bigint2=in.nextBigInteger();//输入第二个大整数
System.out.println("您当前正在进行第"+i+"次运算:\n系统检测到您本次输入的第一个整数为:"+bigint1+",第二个大整数为:"+bigint2);
System.out.println("他们的和为:");
System.out.println(bigint1.add(bigint2));//A+B就是A.add(B)
System.out.println("他们的差为:");
System.out.println(bigint1.subtract(bigint2));//A-B就是A.add(B)
System.out.println("他们的积为:");
System.out.println(bigint1.multiply(bigint2));//A*B就是A.multiply(B)
System.out.println("前者mod后者3:");
System.out.println(bigint1.remainder(bigint2));//AmodB就是A.remainder(B)
System.out.println("他们的最大公约数为:");
System.out.println(bigint1.gcd(bigint2));//求A和B的最大公约数就是A.gcd(B)
}
System.out.println("感谢使用!");
}
}

猜你喜欢

转载自blog.csdn.net/coco56/article/details/79258026
今日推荐