java 大数类 总结 整数小数(BigInteger和BigDecimal)

来源:互联网 发布:手机数据分区损坏修复 编辑:程序博客网 时间:2024/06/04 17:40

java大法好,退c保平安

看完java的大数类,决定重新做一下之前大数的题

然后再整理一下吧= =


整数部分(BigInterger)

hdu 1001 求从1加到n,n可以很大

//package BigInteger1;import java.io.*;import java.math.BigInteger;import java.util.*;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner cin=new Scanner(System.in);while(cin.hasNextLong()){long n = cin.nextLong();BigInteger mul = BigInteger.ZERO;for(long i=0;i<=n;i++)mul=mul.add(BigInteger.valueOf(i));         System.out.println(mul);         System.out.println();    }}}
hdu 1002 大整数相加

import java.io.*;import java.math.BigInteger;import java.util.*;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner cin=new Scanner(System.in);int test = cin.nextInt();for(int tt=1;tt<=test;tt++){BigInteger a = cin.nextBigInteger();BigInteger b = cin.nextBigInteger();System.out.println("Case "+tt+":");//这里不断开,用\n会报错??System.out.println(a+" + "+b+" = "+a.add(b));        if(tt!=test)System.out.println();    }}}

hdu 1041 递推公式+大数(如a[i]=a[i-1]+2*a[i-2])

import java.io.*;import java.math.BigInteger;import java.util.*;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner cin=new Scanner(System.in);BigInteger [] a=new BigInteger [1005];a[1]=BigInteger.ZERO;a[2]=BigInteger.ONE;a[3]=a[2];a[4]=a[2].add(a[2].add(a[2]));for(int i=4;i<=1000;i++){a[i]=a[i-1].add(a[i-2].add(a[i-2]));}while(cin.hasNext()){//打表int n = cin.nextInt();System.out.println(a[n]);}}}

hdu 1042 n!

import java.io.*;import java.math.BigInteger;import java.util.*;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner cin=new Scanner(System.in);while(cin.hasNext()){int n = cin.nextInt();BigInteger mul = BigInteger.ONE;for(int i=1;i<=n;i++)mul=mul.multiply(BigInteger.valueOf(i));         System.out.println(mul);    }}}

还有高精度幂:(BigDecimal)

hdu 1063 小数的n次方

import java.io.*;import java.math.BigDecimal;import java.util.*;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner cin = new Scanner(System.in);while(cin.hasNextBigDecimal()){BigDecimal ans = cin.nextBigDecimal();int n=cin.nextInt();String res = ans.pow(n).stripTrailingZeros().toPlainString();//整数去掉小数点+后面的0 if(res.startsWith("0")) //去掉前导0              {                  res = res.substring(1);              }              System.out.println(res); //  或者          if(res.charAt(0)=='0')//            res = res.substring(1);                    //ans=ans.pow(n);//ans =ans.pow(n).stripTrailingZeros();整数去掉小数点//System.out.println(ans); }}}

小数相加:

hdu1753(都要注意去后置零,和整数去点,如果题目要求再去前置零用if

package teat1;import java.io.*;import java.math.BigDecimal;import java.util.*;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner cin = new Scanner(System.in);while(cin.hasNextBigDecimal()){BigDecimal a= cin.nextBigDecimal();BigDecimal b = cin.nextBigDecimal();String ans=a.add(b).stripTrailingZeros().toPlainString();System.out.println(ans);}}}


整理一下:(随便写的

对于整数的题(先不看BigDecimal

import java.io.*;import java.math.BigInteger;import java.util.*;public class Main {public static void main(String[] args) {//声明和赋值Scanner cin=new Scanner(System.in);//在import java.util.*;包中,//实现了大整数输入的方法   cin.nextBigInteger()BigInteger big1=BigInteger.ZERO;//0 声明一个大整数并常数值赋值0BigInteger big2=BigInteger.ONE;//1BigInteger big3=BigInteger.TEN;//10BigInteger big4 =new BigInteger("1000");//赋除了0,1,10之外的常数值的方法一BigInteger big5= BigInteger.valueOf(1000);//没有new赋除了之外的常数值的方法二//BigInteger bi1 =  new BigInteger(55,new Random());  生成一个个随机的大整数BigInteger [] a=new BigInteger [1005];//声明大整数数组,并赋值a[1]=BigInteger.ZERO;a[2]=BigInteger.ONE;a[3]=a[2];a[4]= BigInteger.valueOf(3);//a[4]=a[2].add(a[2].add(a[2]));int n = cin.nextInt();System.out.println(a[n]);//手动输入int n1=cin.nextInt();//输入一个int型的n1long n2=cin.nextLong();//输入一个long的n2BigInteger n3 = cin.nextBigInteger();//声明一个大数,并手动输入这个值BigInteger n4 = cin.nextBigInteger();//case处理while(cin.hasNext()){//cin.hasNext()输入结束同c++里的while(scanf("%d",&n)!=EOF)}while(cin.hasNextLong()){//同上,这个输入的是long类型时}int test = cin.nextInt();while(test-- >0){//同c++里的while(scanf(test--))}for(int tt=4;tt<=test;tt++)    {//需要记录case++时候System.out.println("Case "+tt+":");//这里不断开,用\n会报错??System.out.println(big1+" + "+big2+" = "+big1.add(big2));}//四则运算及其他System.out.println(n3.add(n4));//n3+n4System.out.println(n3.subtract(n4));//n3-n4System.out.println(n3.multiply(n4));//n3*n4System.out.println(n3.divide(n4));//n3/n4(两个大整数,整除的商System.out.println(n3.remainder(n4));//n3%n4(两个大整数,取余数System.out.println(n3.mod(n4));//同上System.out.println(n3.gcd(n4));//n3和n4的最大公约数System.out.println(n3.abs());//n3取绝对值System.out.println(n3.negate());//n3取相反数System.out.println(n3.min(n4));//n3System.out.println(n3.max(n4));//n3System.out.println(n3.abs());//n3取绝对值System.out.println(n3.pow(2));//n3的2次方(指数        System.out.println(n3.toString(2)); // 转化为 x 的 n进制;        System.out.println(n3.compareTo(n4)==0); //x和y进行比较  if(big1.compareTo(big2) > 0)                  System.out.println("bd1 is greater than bd2");             else if(big1.compareTo(big2) == 0)                 System.out.println("bd1 is equal to bd2");             else if(big1.compareTo(big2) < 0)                 System.out.println("bd1 is lower than bd2");  }}


这些留着以后看:


BigInteger(byte[])

把一个包含着(带正负号)整数的二进制补码的字节数组翻译为 BigInteger 

BigInteger(int, byte[])

把一个整数的 sign-magnitude 表示法翻译为 BigInteger 

BigInteger(int, int, Random)

返回有指定 bitLength(可能是素数)的随机选择的 BigInter 

BigInteger(int, Random)

返回一个随机数,均匀分布在 [0, 2**numBits - 1] 之间
(
假设由 rndSrc 提供一个公平的随机源

BigInteger(String)

把一个字符串翻译为一个 BigInteger ,该字符串包含可选的负号,后面跟着一个或多个十进制数字序列。

BigInteger(String, int)

把一个字符串翻译为一个 BigInteger ,该字符串包含可选的负号,后面跟着一个或多个指定进制的数字序列。


0 0
原创粉丝点击