这道题我用的是Java里面的BigInteger(看discuss直接用double也能过)。值得注意的是,整数k不一定存在,这时需要向下取整,与题目描述不符。
thestoryofsnow | 2109 | Accepted | 3212K | 266MS | Java | 868B |
import java.io.*;
import java.util.*;
import java.math.BigInteger;
public class Main {
public static void main(String args[])
{
final BigInteger MAXK = BigInteger.valueOf(1000000000);
final BigInteger ONE = BigInteger.valueOf(1);
final BigInteger TWO = BigInteger.valueOf(2);
Scanner cin = new Scanner(System.in);
Integer a;
BigInteger b;
while (cin.hasNext())
{
a = cin.nextInt();
b = cin.nextBigInteger();
BigInteger low = ONE, high = b.min(MAXK), mid, p;
while (low.compareTo(high) <= 0)
{
mid = low.add(high).divide(TWO);
int cmp = mid.pow(a).compareTo(b);
if (cmp == 0)
{
high = mid;
break;
}
else if (cmp > 0)
{
high = mid.subtract(ONE);
}
else
{
low = mid.add(ONE);
}
}
System.out.println(high);
}
}
}