C语言OJ项目参考(1992)分数序列

    xiaoxiao2026-01-27  9

    (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; } 相关资源:python入门教程(PDF版)
    最新回复(0)