Java大数有关的知识

大数:
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去掉



阅读更多
个人分类: Java 大数
上一篇poj_3045_Cow Acrobats(二分搜索)
下一篇Java字符串整理
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭