(1992)分数序列
Description
有一个分数序列:2/1, 3/2, 5/3, 8/5, 13/8, …编写程序求出这个序列的前n项之和。
Input
输入只有一个正整数n,1≤n≤10。
Output
输出该序列前n项和,结果保留小数后6位。
Sample Input
3
Sample Output
5.166667
参考解答
#include <stdio.h>
int main ( )
{
int m1=2,m2=1, n, t, i;
double sum=2;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
t=m1;
m1=m2+m1;
m2=t;
sum+=(double)m1/m2;
}
printf("%.6lf", sum);
return 0;
}
注:下面的程序,与上面仅sum的数据类型不同,但在OJ平台提交时就是错的。原因是float类型数据的精度不够。float的有效数字位数为6-7位,小数点后就要保留6位,注定了这6位中会有“意外”,故本题在精度方面的要求,必须要取double型。
#include <stdio.h>
int main ( )
{
int m1=2,m2=1, n, t, i;
float sum=2;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
t=m1;
m1=m2+m1;
m2=t;
sum+=(float)m1/m2;
}
printf("%.6f", sum);
return 0;
}