JAva大数類まとめ整数小数(BigIntegerとBigDecimal)


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 stub
		Scanner 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 stub
		Scanner 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+":");//     , 
?? 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 stub
		Scanner 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 stub
		Scanner 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 stub
		Scanner 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); 
			}
	}
}

小数点加算:
hdu 1753(いずれも後置ゼロに注意して、整数と点を除いて、もし問題が更に前置ゼロに行って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 stub
		Scanner 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              0
		BigInteger big2=BigInteger.ONE;//1
		BigInteger big3=BigInteger.TEN;//10
		
		BigInteger 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  n1
		long n2=cin.nextLong();//    long n2
		
		BigInteger 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+":");//     , 
?? System.out.println(big1+" + "+big2+" = "+big1.add(big2)); } // System.out.println(n3.add(n4));//n3+n4 System.out.println(n3.subtract(n4));//n3-n4 System.out.println(n3.multiply(n4));//n3*n4 System.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));//n3 System.out.println(n3.max(n4));//n3 System.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)
文字列を1つに翻訳する BigInteger ,この文字列には、1つ以上の10進数シーケンスに続くオプションの負の番号が含まれます.
BigInteger(String, int)
文字列を1つに翻訳する BigInteger ,この文字列には、1つ以上の指定された進数の数値シーケンスに続くオプションの負の記号が含まれます.