JAva大数類まとめ整数小数(BigIntegerとBigDecimal)
JAva大法好,退c保平安
Javaの大数類を見終わって、前の大数の問題をもう一度やることにしました.
そしてもうちょっと整理しよう==
整数部(BigInterger)
hdu 1001は1からnを加えることを求めて、nはとても大きいことができます
hdu 1041繰返し式+大数(例えばa[i]=a[i-1]+2*a[i-2])
hdu 1042 n!
さらに高精度べき乗:(BigDecimal)
hdu 1063小数のn次方
小数点加算:
hdu 1753(いずれも後置ゼロに注意して、整数と点を除いて、もし問題が更に前置ゼロに行ってifを使うことを要求するならば
整理しておきます:(勝手に書いてあります)
整数の問題について(BigDecimalを先に見ない)
これらは残しておいてください.
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つ以上の指定された進数の数値シーケンスに続くオプションの負の記号が含まれます.
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つ以上の指定された進数の数値シーケンスに続くオプションの負の記号が含まれます.