最近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:
クリックしてリンクを開く
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);
		}
	}
}