/** * Sum Problem * 简单题,使用高斯求和公式求和即可,注意避免中间计算结果溢出就OK. */ public class Problem1001 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n; while (scanner.hasNext()) { n = scanner.nextInt(); int x = 1 + n; /** * 根据高斯求和公式求解即可(1 + n) * n / 2; * 不过要注意,题目中虽然保证了结果在32bit符号整数范围内 * 但是使用高斯求和公式的过程中可能会溢出(乘法),所以不能直接使用 * 公式的计算顺序;因为整型运算是向0舍入的(3 / 2 == 1),所以为了避免 * 改变公式顺序带来的错误,需要对除以2的参数进行奇偶判定 */ if (n % 2 == 0) System.out.println((n >> 1) * x); // n >> 1表示将n右移一位等价n / 2 (下同) else System.out.println((x >> 1) * n); // 题目要求的blank line System.out.println(); } } }
HDOJ 1001 Sum Problem
最新推荐文章于 2022-05-29 12:35:28 发布