问题1605--【课课通-例题】9.7.7金币

1605: 【课课通-例题】9.7.7金币

[命题人 : ]
时间限制 : 1.000 sec  内存限制 : 128 MB

题目描述

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去。当连续n天每天收到n枚金币后,骑土会在之后的连续n+1天里,每天收到n+1枚金币(n为正整数)。
请编程确定从第一天开始的给定天数内,骑士一共获得了多少金币。

输入

输人包含至少一行,但不多于1000行。
除最后一行外,输入的每行是一组输入数据,包含一个正整数n,表示天数。
输入的最后一行为0,表示输入结束。

输出

对每个数据输出一行一个整数,表示该数据对应总金币数。

样例输入 Copy

10
6
7
11
15
16
100
10000
1000
21
22
0

样例输出 Copy

30
14
18
35
55
61
945
942820
29820
91
98

提示

本题用模拟、枚举的方法直接累计,只能通过60%—80%的数据测试;
有20%40%的测试数据规模设置为10^6—10^12,在模拟、枚举的过程中会出现超时;
对于超时数据只能利用数学推导进行优化,采用方程的方式进行求解:
n=(long long)(sqrt(x*2+0.25)-0.5);
ans=(x-n*(n+1)/2)*(n+1)+n*(n+1)*(2*n+1)/6;