杭电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 }