最近Javaで高精度な問題をいくつか作りました
Javaで高精度な問題を作るのは、C++を使うよりずっと簡単です.
1つの「大数」または1つの「サイズ数」はJavaでパッケージされたオブジェクトです.
重要な把握:
Scannerの使い方:Scanner cin=new Scanner(System.in);
int x;
BigInteger big;
String str;
String定数をBigIntegerに変換するには: big=new BigInteger("0");
int変数をBigIntegerに変換するには: big=BigInteger.valueOf(x);
BigIntegerからString定数への変換: str=big.toString(); //指数フィールド、すなわち科学的な記数法、例えば:1.23 E+4
BigIntegerは「素朴な」String:str=big.toPlainSting(); //指数フィールドを持たず、純粋な高精度で、 例えば:12300
BigIntegerは尾の余分な「0」: big=big.stripTrailingZero()/小数の後ろに余分な「0」がある場合は削除し、整数の末尾に「0」がある場合は科学的な記数法になります.(明らかに等値を保つ必要があります)
BigIntegerクラス、BigDecimalクラスの多くの重要な演算はすでにパッケージされています.
クリックしてリンクを開く
Stringクラスもかなり完備しています.
クリックしてリンクを開く
次の2つの例を示します.
Hdu1313:
クリックしてリンクを開く
hdu1753:
クリックしてリンクを開く
1つの「大数」または1つの「サイズ数」はJavaでパッケージされたオブジェクトです.
重要な把握:
Scannerの使い方:Scanner cin=new Scanner(System.in);
int x;
BigInteger big;
String str;
String定数をBigIntegerに変換するには: big=new BigInteger("0");
int変数をBigIntegerに変換するには: big=BigInteger.valueOf(x);
BigIntegerからString定数への変換: str=big.toString(); //指数フィールド、すなわち科学的な記数法、例えば:1.23 E+4
BigIntegerは「素朴な」String:str=big.toPlainSting(); //指数フィールドを持たず、純粋な高精度で、 例えば:12300
BigIntegerは尾の余分な「0」: big=big.stripTrailingZero()/小数の後ろに余分な「0」がある場合は削除し、整数の末尾に「0」がある場合は科学的な記数法になります.(明らかに等値を保つ必要があります)
BigIntegerクラス、BigDecimalクラスの多くの重要な演算はすでにパッケージされています.
クリックしてリンクを開く
Stringクラスもかなり完備しています.
クリックしてリンクを開く
次の2つの例を示します.
Hdu1313:
クリックしてリンクを開く
import java.util.*;
import java.math.*;
public class Main
{
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
BigInteger big;
while(cin.hasNext())
{
boolean flag=true;
String str=cin.nextLine();
int len=str.length();
for(int i=1;i<=len && flag; ++i)
{
big=new BigInteger(str);
big=big.multiply(BigInteger.valueOf(i));
String str2=big.toString();
while(str2.length()<len)
str2="0"+str2;
str2=str2+str2;
if(str2.indexOf(str)==-1)
flag=false;
}
if(flag)
System.out.println(str+" is cyclic");
else
System.out.println(str+" is not cyclic");
}
}
}
hdu1753:
クリックしてリンクを開く
import java.util.*;
import java.math.*;
public class Main
{
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
BigDecimal a, b;
while(cin.hasNext())
{
a=cin.nextBigDecimal();
b=cin.nextBigDecimal();
a=a.add(b);
String ans=a.stripTrailingZeros().toPlainString();
System.out.println(ans);
}
}
}