質問: Javaのついて質問です。 BigInteger型の変数の平方根を整数に切り上げてBigInteger型(もしくはBigDecimal型に)の変数に入れたいのですができますか。
回答: BigIntegerクラスのメソッドとしては、平方根は無いようですね。 Java8のラムダ式を使えば、BigInteger型の変数の平方根を求めるapplyメソッドを造ることができます。 class Ideone { public static void main (String[] args) throws java.lang.Exception { java.util.function.UnaryOperator squareRootFunction = (inputData) -> { BigInteger squareRoot1 = inputData.divide(BigInteger.valueOf(2L)); do { BigInteger squareRoot2 = squareRoot1; squareRoot1 = inputData.divide(squareRoot2).add(squareRoot2).divide(BigInteger.valueOf(2L)); if(squareRoot1.compareTo(squareRoot2) == 0) return squareRoot1; } while(true); }; BigInteger inputData = new BigInteger("1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012"); System.out.println(inputData); BigInteger 平方根 = squareRootFunction.apply(inputData); System.out.println(平方根); BigInteger 検算値 = inputData.divide(squareRootFunction.apply(inputData)); System.out.println(検算値.multiply(検算値)); System.out.println(検算値.multiply(平方根)); } } 実行結果は、