题目描述:
输入格式和数据大小:
题解:
一条边是由2个顶点组成,每个交点需要2条边,即需要4个顶点组成一个交点,所以问题转化为计算n个顶点中有多少个4个顶点的组合。使用组合公式即可求出,此时可以化简组合公式为n * (n-1) / 2 * (n-2) / 3 * (n-3) / 4 ,但数据使用int类型范围过小,使用long也会出现部分数据不通过的情况,所以使用麻烦的BigInteger。
BigInteger不是基本数据类型,所以加减乘除不能使用+、-、*、/这些运算符号,而是使用add()、subtract()、mutiply()、divide()这四种方法代替。
代码如下:
import java.math.BigInteger;
import java.util.Scanner;
// P2181 对角线
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
BigInteger n = scanner.nextBigInteger();
scanner.close();
BigInteger number1 = new BigInteger("1");
BigInteger number2 = new BigInteger("2");
BigInteger number3 = new BigInteger("3");
BigInteger number4 = new BigInteger("4");
n = n.
multiply(n.subtract(number1)).divide(number2).
multiply(n.subtract(number2)).divide(number3).
multiply(n.subtract(number3)).divide(number4);
System.out.println(n);
}
}
|