我是靠谱客的博主 无情红牛,最近开发中收集的这篇文章主要介绍java学习——大数类型的简单使用方法 Biginteger Bigdecimal,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

引题:

•思考如下 题目:
n !的阶乘最右边的那个非 0 数字( n<=100
例如:
4!=24    4
5!=120  2
6!=720  2
7 =5040 4
思路:
n=5 开始最右边一直有 0 (因为前面的因子里面包含 10 只要找到最右边第一个非 0
难点:一般数据类型存储不了这么大的数
Int         最大是 2^32 4 亿
long     最大是 2^64 10^19
30 !就达到了 10^32

解决方案: Java 的大数类型

如何解决装不下的问题

Java的新类型——大数类型Biginteger (大整数)Bigdecimal(大浮点数)

它并不是基本数据类型,实际上是一个类,类似String,把它的成员变量和方法封装在一起

不能直接用+- * / %符号进行加减运算,但可以调用它的加减乘除取余等函数

理论上可以装无限大的数,只要计算机内存够用。

只需要学会大数的使用方法,再将之前的代码改造一下,类型换一下,问题就解决了

大数的使用1


import java.math.BigInteger;

需要导入此包才能使用

定义一个大数

BigInteger n

直接初始化

BigInteger sum=new BigInteger("11234455675757657567657");

用字符串 String 初始化

Strings="12345678911111111111111111";

BigInteger n=new BigInteger(s);

技巧:使用alt+/查看类的成员和函数有哪些

大数的使用2

. valueof () 初始化

BigInteger n0=BigInteger.valueOf(123);//这种形式,括号里的数不能超过long的最大值)

. valueof () 进行赋值和转化

inta=123456

n0=BigInteger.valueOf(a);//int型转为大数

大数的使用3

  .add( )

BigInteger n1=new BigInteger("57657567657");

BigInteger n2=new BigInteger(“123123123123");

n1.add(n2);

  .subtract()

.n1.subtract(n2);

  . multiply()

n1. multiply(n2); 

整除 . divide()

取模.remainder()  //与上面用法类似

大数的使用4

比较 . compareTo ()

a.compareTo(b)的返回值

0  ab相等

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

附上结果图





最后

以上就是无情红牛为你收集整理的java学习——大数类型的简单使用方法 Biginteger Bigdecimal的全部内容,希望文章能够帮你解决java学习——大数类型的简单使用方法 Biginteger Bigdecimal所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部