求数列的和

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 74554 Accepted Submission(s): 45280

Problem Description
数列的定义如下:
数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。

Input
输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述。

Output
对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。

Sample Input
81 4
2 2

Sample Output
94.73
3.41

AC代码:

#include <stdio.h>
#include <math.h>
int main (){ 
    int m,n,i;
    double sum,num;
    double a[1008];  
    while (scanf("%d%d",&n,&m)!=EOF){
        a[0]=n;
        sum=n; 
        for (i=1;i<m;i++){
            a[i]=sqrt(a[i-1]);
            sum+=a[i];    
        }
        printf("%.2lf\n",sum);
    }
    return 0;    
}

用数组写的明显有点繁琐了,下面的代码更加简洁些:
另一个AC代码:

#include <stdio.h>
#include <math.h>
int main(){
    double m,n,sum,i;
    while(scanf("%lf%lf",&n,&m)!=EOF){
    for(i=0,sum=0;i<m;i++){
        sum+=n;
        n=sqrt(n);}
        printf("%.2lf\n",sum);
    }
    return 0;
}