Java杨辉三角求一个数N的位置【2021蓝桥杯】
实现1<N<1000000000;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
BigInteger big = scanner.nextBigInteger();
search(big);
}
public static void search(BigInteger bigInteger) {
for (int m = 17; m > 0; m--) {
for (int n= 2*m; n > 0; n++) {
BigInteger result = combine(m, n);
switch (bigInteger.compareTo(result)) {
case 0:
System.out.println(getIndex(m+1, n+1));
return;
case -1:
n = -1;
break;
default:
if (m == 1) {
System.out.println(bigInteger.add(new BigInteger("" + -1)));
return;
}
break;
}
}
}
}
public static int getIndex(int m, int n) {
return (n * (n - 1) / 2 + m);
}
public static BigInteger combine(int m, int n) {
BigInteger a = new BigInteger("1");
BigInteger b = new BigInteger("1");
for (int i = n; i >= (n - m + 1); i--) {
a = a.multiply(new BigInteger("" + i));
}
for (int i = 1; i <= m; i++) {
b = b.multiply(new BigInteger("" + i));
}
return a.divide(b);
}
}