zoukankan      html  css  js  c++  java
  • Java大数处理

    以前整理过有关Java的基本知识,也写了几个有关java的题目,不过发现不够完善,现在重新整合一下。

    1.Java的输入与输出

    java的输入是先定义一个scanner,然后用这个进行输入,并且每一种输入都有相应的输入函数,具体如下:

    public class Main
    {
        public static void main(String[] args)
        {
            Scanner cin = new Scanner ( System.in);
            int a;
            double b;
            BigInteger c;
            String st;
            a = cin.nextInt();
            b = cin.nextDouble();
            c = cin.nextBigInteger();
            d = cin.nextLine();
            // 每种类型都有相应的输入函数.
        }
    }

    Java的输出相较于输入来说就简单一些了。

    System.out.println(a + " " + b);
    System.out.printf("%d %10.5f
    ", a, b);
    
    /*规格化的输出:
    函数:这里0指一位数字,#指除0以外的数字(如果是0,则不显示),四舍五入.*/
    DecimalFormat fd = new DecimalFormat("#.00#");
    DecimalFormat gd = new DecimalFormat("0.000");
    System.out.println("x =" + fd.format(x));
    System.out.println("x =" + gd.format(x));

    2.大数部分

    java支持大数的操作,其中也是由具体函数实现的。看下面的例子:

    int a = 123, b = 456;
    BigInteger x, y, z, ans;
    x = BigInteger.valueOf(a);//转换
    y = BigInteger.valueOf(b);
    ans = x.add(y);
    ans = x.divide(y);
    ans = x.mod(y);
    if (ans.compareTo(x) == 0)//比较
        System.out.println("相等");

    这里就写出了int型转换成大数型以及加减乘除比较的基本操作。其中函数原型如下:

    BigInteger add(BigInteger other) 
    BigInteger subtract(BigInteger other) 
    BigInteger multiply(BigInteger other) 
    BigInteger divide(BigInteger other) 
    BigInteger mod(BigInteger other) 
    int compareTo(BigInteger other) 
    static BigInteger valueOf(long x) 

    这是大整数的操作,其中还有一个数据类型为:BigDecimal,表示小数,操作与以上相同。

    3.格式化输出:

    以前做题遇到过这样的情况,如何去掉末尾的0,有一个具体的函数,stripTrailingZeros()函数就是用于去除末尾多余的0的,但是此时程序的输出为科学记数法例如: 1E+2。解决的方法很简单,如果想要避免输出科学计数法的字符串,我们要用toPlainString()函数代替toString()。如:System.out.println( new BigDecimal("100.000").stripTrailingZeros().toPlainString());此时程序的输出就为 100。具体实现:

            Scanner in=new Scanner (System.in);
            BigDecimal a,b;
            while(in.hasNext())
            {
                a=in.nextBigDecimal();
                b=in.nextBigDecimal();
                System.out.println(a.add(b).stripTrailingZeros().toPlainString());
            }

    4.具体实例:

    HDU - 1042:计算阶乘:

    import java.io.*;
    import java.math.BigInteger;
    import java.util.*;
    public class Main//注意在oj提交是要用Main
    {
        public static void main(String[] args) 
        {
            Scanner in=new Scanner (System.in);
            int n;
    
            while(in.hasNext())
            {
                n=in.nextInt();
                BigInteger sum=BigInteger.valueOf(1);
                for(int i=1;i<=n;i++)
                    sum=sum.multiply(BigInteger.valueOf(i));
                System.out.println(sum);
            }
        }
    }

    POJ1001 计算a^b 注意是小数

    import java.io.*;
    import java.math.BigDecimal;
    import java.math.BigInteger;
    import java.util.*;
    public class Main//注意在oj提交是要用Main
    {
        public static void main(String[] args) 
        {
            Scanner in=new Scanner (System.in);
            int n;
            BigDecimal a,b;
            while(in.hasNext())
            {
                b=BigDecimal.valueOf(1);
                a=in.nextBigDecimal();
                n=in.nextInt();
                for(int i=0;i<n;i++)
                {
                    b=b.multiply(a);
                }
                String s = b.stripTrailingZeros().toPlainString();
                if(s.startsWith("0"))
                    s=s.substring(1);
                System.out.println(s); 
            }
        }
    }

    HDU - 1753  计算A+B 保留最简形式

    import java.io.*;
    import java.math.BigDecimal;
    import java.math.BigInteger;
    import java.util.*;
    public class Main//注意在oj提交是要用Main
    {
        public static void main(String[] args) 
        {
            Scanner in=new Scanner (System.in);
            BigDecimal a,b;
            while(in.hasNext())
            {
                a=in.nextBigDecimal();
                b=in.nextBigDecimal();
                System.out.println(a.add(b).stripTrailingZeros().toPlainString());
            }
        }
    }

    UVA 10007:计算卡特兰数

    import java.math.BigInteger;
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner input = new Scanner(System.in);
            BigInteger []k = new BigInteger[1100];
            k[0] = BigInteger.valueOf(1);
            for(int j=1;j<310;j++)
            {
                    k[j]=k[j-1].multiply(BigInteger.valueOf(4*j-2)).divide(BigInteger.valueOf(j+1));  
            }
            while (true)  
            {  
                int times=input.nextInt(); 
                BigInteger sum=BigInteger.valueOf(1);
                if(times!=0)  
                    {
                        for(int i=1;i<=times;i++)
                            sum=sum.multiply(BigInteger.valueOf(i));
                        System.out.println(sum.multiply(k[times]));  
                    }
                else 
                {  
                    break;  
                }  
            }  
        }
    
    }
  • 相关阅读:
    转:python时间日期处理小结
    vi 的一些常用操作-君子善假于物也
    没有了老师,该如何学习?
    git常用命令
    python 读配置文件
    Python中unittest用法实例
    python 单元测试unnitest-摘录自http://www.cnblogs.com/hackerain/p/3682019.html#undefined
    纯CSS实现立方体旋转
    CSS 3动画
    CSS 2D转换
  • 原文地址:https://www.cnblogs.com/aiguona/p/9133554.html
Copyright © 2011-2022 走看看