ACM程序设计(第2版)
上QQ阅读APP看书,第一时间看更新

3.4 等比数列

3.4.1 链接地址

http://www.realoj.com/网上第71题

3.4.2 题目内容

已知qn,求等比数列之和:1+q+q2+q3+q4+…+qn

输入描述:输入数据不多于50对,每对数据含有一个整数n(1≤n≤20)、一个小数q(0<q<2)。

输出描述:对于每组数据nq,计算其等比数列的和,精确到小数点后3位,每个计算结果应单独占一行。

输入样例

        6 0.3 5 1.3

输出样例

        1.428
        12.756

3.4.3 参考答案

对于等比数列之和Sn =a1+a2+a3+…+an,有公式。本例要求的等比数列,实际上是有n+1项,且a1=1。

另外,求xy的函数是pow(x, y),它需要“#include<cmath>”。

本题要求控制小数点后的位数,如果采用C语言的printf函数来输出,那么控制小数点后的位数形式为“printf("%*.*f", a);”,如“printf("%.3f\n", sum);”。如果采用C++的cout输出,那么先用“cout.precision(n);”来设定小数点后保留n位,然后,输出时加“fixed”参数,表明是定点输出。

        #include <iostream>
        #include <fstream>
        #include <cmath>
        using namespace std;

       int main(int argc, char * argv[])
        {
          ifstream cin("aaa.txt");
            //定点输出小数点后3位;否则是输出有效数字3位
          cout.precision(3);
            int n;
            double q, sum;
            while(cin>>n>>q)
            {
              if(q==1)sum=1+n;
              else
                    sum=(1-pow(q, n+1))/(1-q);
              //使用fixed,定点输出,即小数点后的精度是3位
              cout<<fixed<<sum<<endl;
          }
          return 0;
        }