杭电acm1178

http://acm.hdu.edu.cn/showproblem.php?pid=1178

这题关键在于推导出通项公式为 i*(i+1)/2的前n项和,

由于n(n+1)=[n(n+1)(n+2)-(n-1)n(n+1)]/3
所以1*2+2*3+...+n(n+1)
=[1*2*3-0+2*3*4-1*2*3+....+n(n+1)(n+2)-(n-1)n(n+1)]/3
[前后消项]
=[n(n+1)(n+2)]/3

所以1^2+2^2+3^2+......+n^2
=[n(n+1)(n+2)]/3-[n(n+1)]/2
=n(n+1)[(n+2)/3-1/2]


另外一个就是科学计数法的输出,这里分为两个部分输出,一个是E前面,一个是E后面的幂;
前面算出保留了三个有效数字的小数,后面算是有多少次幂
View Code
 1 #include<stdio.h>
 2 #include<math.h>
 3 int main()
 4 {
 5     double n,sum;
 6     int d;
 7     while(scanf("%lf",&n)&&n)
 8     {
 9        sum=( (n+2)*(n+2)*(n+2)-(3*n*n+10*n+8) )/6;
10        d=0;
11        while(sum/10>=1)//算出保留三个有效数字的小数
12        {
13           d++;//计数次幂
14           sum/=10;
15        }
16        printf("%.2lfE%d\n",sum,d);
17     }
18     return 0;
19 }

 

posted @ 2013-04-18 20:49  执着追求的IT小小鸟  阅读(95)  评论(0编辑  收藏  举报