PAT A1104 Sum of Number Segments
-
想法是将数字一个个加入序列,当第i个数字x加入时,会产生i个新的序列,这些序列由i个x和上一次新产生的序列组成。
-
所以用tmp记录上一次新产生的和,再添上这一次的i个x,形成本次新增的,累加进total
-
看了书上和柳神写的,有点像数PAT那个,对于第i个位置的数,所有包含她的序列的起点有i种,终点有n-i+1种
-
所以每次给输入*i*(n-i+1),然后累加就行了,更加高级,不容易犯错
-
另外感谢柳婼姐姐的update,否则第三个点我就只能挂树上了,仍然是double累加时的精度问题,这里采用了比较偷懒的long double
-
#include "iostream"
using namespace std;
long double total = 0,tmp = 0;
int main(){
int num;
cin >> num;
for (int i = 1; i <= num; ++i) {
long double dd;
scanf("%llf",&dd);
tmp += dd * i;
total += tmp;
}
printf("%.2llf",total);
return 0;
}