java biginteger不工作

时间:2018-02-27 01:06:41

标签: java algorithm biginteger

输入文字 五 1 五 7 10 123456789123456789

使用binginteger因为输入值很大

不适用于123456789123456789。 我不知道哪个是错的。

对于游戏方法,两个人首先确定一个正整数N并且有一个用1初始化的x。

Alice首先开始游戏,然后轮流,她自己完成以下工作。

将x替换为2x或2x + 1。

当x大于N(over)时,完成工作的人将被击败。

我的代码如下。

public static Boolean result(int X, BigInteger N) {
    if(X == 0)
        return false;
    else if(X % 2 == 0) {
        BigInteger check = BigInteger.valueOf((int)((3*Math.pow(2,X)-1)/2));
        if(check.compareTo(N) == 1 || check.compareTo(N) == 0)
            return true;
        else 
            return false;
    }
    else
        return true;
}

public static int returnX(BigInteger N) {
    int X = 0;
    while(true) {
        if((BigInteger.valueOf((int)Math.pow(2,X)).compareTo(N) == -1 
                || BigInteger.valueOf((int)Math.pow(2,X)).compareTo(N) == 0)
                && N.compareTo(BigInteger.valueOf((int)Math.pow(2,X+1))) == -1)
            break;
        X++;
    }
    return X;
}

public static void main(String args[]) {
    Scanner sc = new Scanner(System.in);
    int T;
    T = sc.nextInt();
    BigInteger[] N = new BigInteger[T];

    for (int test_case = 1; test_case <= T; test_case++) {
        N[test_case-1] = sc.nextBigInteger();
    }

    for (int test_case = 1; test_case <= T; test_case++) {
        if(result(returnX(N[test_case-1]),N[test_case-1])) {
            System.out.printf("#%d Alice\n",test_case);
        }
        else
            System.out.printf("#%d Bob\n",test_case);
    }
}

0 个答案:

没有答案