引题:
如何解决装不下的问题
Java的新类型——大数类型Biginteger (大整数)Bigdecimal(大浮点数)
它并不是基本数据类型,实际上是一个类,类似String,把它的成员变量和方法封装在一起
不能直接用+- * / %符号进行加减运算,但可以调用它的加减乘除取余等函数
理论上可以装无限大的数,只要计算机内存够用。
只需要学会大数的使用方法,再将之前的代码改造一下,类型换一下,问题就解决了
大数的使用1
import java.math.BigInteger;
需要导入此包才能使用
BigInteger n;
BigInteger sum=new BigInteger("11234455675757657567657");
Strings="12345678911111111111111111";
BigInteger n=new BigInteger(s);
技巧:使用alt+/查看类的成员和函数有哪些
大数的使用2
BigInteger n0=BigInteger.valueOf(123);//这种形式,括号里的数不能超过long的最大值)
inta=123456;
n0=BigInteger.valueOf(a);//将int型转为大数类
大数的使用3
BigInteger n1=new BigInteger("57657567657");
BigInteger n2=new BigInteger(“123123123123");
n1.add(n2);
.n1.subtract(n2);
n1. multiply(n2);
取模.remainder() //与上面用法类似
大数的使用4
a.compareTo(b)的返回值
为0 a与b相等
>0 a大于b
<0 a小于b
If( a.compareTo(b) == 0 ) System.out.println(“a == b”); //大整数a==b
Else if( a.compareTo(b) > 0 ) System.out.println(“a > b”); //大整数a>b
Else if( a.compareTo(b) < 0 ) System.out.println(“a < b”); //大整数a<b
思考:为什么不能直接用a==b来比较?而必须要用成员函数
因为这是类,类名是引用类型 是地址 a==b比较的是它两引用的地址是否相同
所有,就算a b内容一样,但由于是不同的地址 结果还是不相等的 是0
大数的使用5
Scanner cin=newScanner(System.in);
BigInteger n=cin.nextBigInteger();
System.out.println(n);
更多
Bigdecimal与Biginteger 的使用方法完全一致,不再重复。
以上仅仅是简单的介绍,大数的成员变量和成员方法不仅仅只有这些,有非常多,功能非常强大,如求绝对值.abs() 求两个值的最大 最小.max() .min() 等等,这里不一一介绍了 大家可以有需要可以自行百度
如果不用大数,思路比较简单的,但数会溢出,当n>=10,就会出现错误
import java.util.*;
public class problem7 {
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
int sum=1;
for(int i=1;i<=n;i++)
{
sum*=i;
}
System.out.println("n!="+sum);
while(sum%10==0)
{
sum=sum/10;
}
System.out.println("所取位:"+sum%10);
}
}
用大数进行改造后,可以装无限大的数,只要计算机内存够用。不会溢出。
import java.util.Scanner;
import java.math.*;
public class problem7a {
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
BigInteger sum=new BigInteger("1");
BigInteger n0=new BigInteger("0");
BigInteger n10=new BigInteger("10");
for(int i=1;i<=n;i++)
{
sum=sum.multiply(BigInteger.valueOf(i));
}
System.out.println("n!="+sum);
while(sum.remainder(n10).compareTo(n0)==0)
{
sum=sum.divide(n10);
}
System.out.println("所取位:"+sum.remainder(n10));
}
}
附上结果图