Java大数有关的知识

19人阅读 评论(0) 收藏 举报
分类:
大数:
BigInteger 和 BigDecimal分别表示大整数类和大浮点数类。
这两个类都在java.math.*包中,因此每次必须在开头处引用该包
一、大数的基本运算:以整数为例实现 BigInteger
   1.)输入:
BigInteger a = in.nextBigInteger();
  或者:BigInteger b = new BigInteger(in.next());
   2.)两个大数相加:     a.add(b);
   3.) 两个大数相减:     a.subtract(b);
   4.) 相乘:             a.multiply(b);
   5.)相除取整           a.divide(b)
   6.)取余,两种表示      a.mod(b) = a%b = a.remainder(b)
   7.)幂运算a^c          a.pow(c);//c为Int整数
   8.)a,b的最大公约数    a.gcd(b)
   9.)一个数的绝对值     a.abs()
  10.)取反数             a.negate()
  11.)最大max最小min  两者取大小      a.max(b)    a.min(b)
  12.)判断大小    a.compareTo(b) :如果a == b 输出0;如果a < b 输出-1;如果a > b输出1。(int型)
  13.)判断是否相等 :a.equals(b)    如果相等输出true , 否则输出false(Boolean类型)
  14.)//常量,可以初始化用
System.out.println(BigInteger.ONE);  //1
System.out.println(BigInteger.ZERO);   //0
System.out.println(BigInteger.TEN);  //10
  15.)将大数转换成不同的进制数:,toString(p); //没有P默认为十进制,否则自定义
        //返回大整数十进制的字符串表示,十进制也可以用下面的表示即p = 10,
System.out.println(a.toString());    //结果是字符串
System.out.println(b.toString());    //结果是字符串
//返回大整数p进制的字符串表示
int p = 10;
System.out.println(a.toString(p));  //结果是字符串
System.out.println(b.toString(p));  //结果是字符串
  
  16.)//将别的类型的数转换成大数。(某些问题可能会用到大数,但是一开始并不是大数,这时就需要转化。比如:例题SDUT3899)
       // int型或者long型用BigInteger.valueOf(k),浮点型用BigDecimal.valueOf(k)
                //浮点型转化
double k = 13.156;
System.out.println(BigDecimal.valueOf(k));  
//整型转换成大数 
int c = in.nextInt();
System.out.println(BigInteger.valueOf(c));
//长整型转换c成大数
long l = 213513L;
System.out.println(BigInteger.valueOf(l));
  17.)//将BigInteger类型转换成别的类型:
         //doubleValue() ,将此 BigInteger 转换为 double
    System.out.println(a.doubleValue());
    System.out.println(b.doubleValue());
//intValue() ,将此 BigInteger 转换为 int
    System.out.println(a.intValue());
    System.out.println(b.intValue());
//floatValue(),将BigInteger转换为float型
    System.out.println(a.floatValue());
    System.out.println(b.floatValue());
//longValue(),将BigInteger转换为long型
    System.out.println(a.longValue());
    System.out.println(b.longValue());
  18.)//nextProbablePrime() ;  返回大于此BigInteger的可能为素数的第一个整数。
    System.out.println(a.nextProbablePrime());
    System.out.println(b.nextProbablePrime());






二、 浮点数处理问题:
    1)输出原始结果(自己计算得出的结果):
         BigDecimal result;
 两种方法:
  法一:System.out.println(result);  //直接输出
  法二:System.out.println(result.toString());  //
         这两种结果是一样的,大部分使用第二个。但是,toString()方法输出的字符串并不能保证不是科学计数法。不过在日常的使用中,用toString()方法输出的就是普通的数字字符串而非科学计数法。
    举个例子:
       System.out.println(new BigDecimal("100.000"));
     结果为:100.000
       System.out.println(new BigDecimal("0000.14541"));
     结果为:0.14541
如果想要把浮点数末尾的0去掉,那么就用下面的方法。


    2)处理浮点数时去掉末尾的0:
一种方法:用.stripTrailingZeros().toString();
            System.out.println( new BigDecimal("100.000").stripTrailingZeros().toString());
       但是这种方法会表示成科学计数法的形式,上面的结果为:1E+2。而我们不希望要这样的结果,而是直接输出100,那么要怎么做呢?
解决的方法很简单,如果想要避免输出科学计数法的字符串,我们要用toPlainString()函数代替toString()。后面多余的0都会删掉。
如:
        System.out.println( new BigDecimal("100.000").stripTrailingZeros().toPlainString());
           结果为:100

在上面的所有方法中如果带有String结果都是字符串类型的,
.toString()   
.stripTrailingZeros().toString()
.stripTrailingZeros().toPlainString()

如果要将结果赋值给一个新的变量,那一定是String类型的字符串。

3)去掉开头的0,开头只有一个0;


String s = result.stripTrailingZeros().toPlainString();
if(s.startsWith("0"))  //去掉首位的0
    s = s.substring(1);  //减掉一位
       s.subString();的用法是对字符串进行的操作;
举例:
String s = "123456";  
        String s1 = s.substring(3);   //在原字符串的基础上减掉三位
System.out.println("s1= " + s1);   //结果为:s1 = 456


 * 如果前面有多个0,输出的时候只输出一个。
 * 而后面有多个0:
 * 用.toString();会输出带0的,在位数限制内(超过多少位会变成科学计数法吧???)。
 * 用.stripTrailingZeros().toString();会输出科学技术法表示的数也是在某个范围之外,与toString()一样
 * 用.stripTrailingZeros().toPlainString();会将末尾的多余的0去掉



查看评论

树的相关知识-------全面解决树的问题

1、树的相关知识 树的度:结点拥有的子树数称为结点的度  度为0的结点称之为叶结点或终端结点; 树的深度:从根结点开始,根结点所在层次为第一层,树中结点的最大层次称为树的深度或者高度; ...
  • yuhuaihzu
  • yuhuaihzu
  • 2017-07-02 18:44:26
  • 184

卫星相关知识

本振频率   本振频率,英文 Local Oscillator 。   就是 LC 振荡器。用在 超外差接收机 中。超外差接收 机中有一个振荡器叫本机振荡器。 它产生的高频电磁波与所接收的高频信号混合...
  • simonjay2007
  • simonjay2007
  • 2016-08-26 14:19:16
  • 896

高德地图小知识点

1.设置地图放大倍数aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 18));//设置地图放大为18倍,缩放级别是在3-19之间...
  • u010575303
  • u010575303
  • 2016-12-24 14:57:29
  • 438

HashMap相关知识点

HashMap:1、HashMap基本概念HashMap是储存键值对的数据储存结构,其底层实际是数组加链表的形式。一个key对应多个value,key和value也可以是null值,相对比的是Hash...
  • obession
  • obession
  • 2017-09-02 10:59:23
  • 105

与线程有关的知识点总结 java

一、java线程的创建与启动   1.定义线程     线程的定义分为两种,一种是继承Java.lang.Thread类,另一种是实现java.lang.Runnable接口。  2.实例化线程   ...
  • hengliwuyou
  • hengliwuyou
  • 2016-02-23 15:31:28
  • 447

有关银行主要知识大全

  • 2009年02月13日 20:12
  • 539KB
  • 下载

寒假知识汇总

1、JAVA 获取class对象 类名.class Class.forName()两种方法什么情况下使用 为什么?    Class.forName()是根据类名称加载类 比如有一个类名为com.ab...
  • rng_suk1
  • rng_suk1
  • 2018-02-25 20:18:31
  • 26

关于 webgis的一些基本知识

  • 2008年12月10日 15:43
  • 647KB
  • 下载

值乎与分答:一场关于知识付费的“有声”暗战

本期作者:相欣        专业人士头脑中隐藏的信息究竟值多少钱?能够快速帮你解决现实问题的方案会有付费需求吗?   很长一段时间以来,这些问题都没法得到很好的回答。现在一些移动互联网产...
  • qq_33541543
  • qq_33541543
  • 2016-06-30 14:21:45
  • 1138

java面试宝典JAVA相关基础知识,j2ee,数据库等题目

  • 2008年12月18日 11:15
  • 114KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 3901
    积分: 587
    排名: 8万+
    最新评论