这是一个多组数据输入和处理的题目。
题目描述
已知 qqq 与 nnn,求等比数列之和:1+q+q2+q3+q4+⋯+qn1 + q + q^2 + q^3 + q^4 + \dots + q^n1+q+q2+q3+q4+⋯+qn
输入
输入数据含有不多于 50对的数据,每对数据含有一个整数 n (1≤n≤20),一个小数 q (0<q<20)。
输出
对于每组数据 n 和 q,计算其等比数列的和,精确到小数点后 3位,每个计算结果应占单独一行。
输入输出样例
样例输入 #1
复制
6 0.3
5 1.3
样例输出 #1
复制
1.428
12.756
提示
浮点数的数据类型用 double
。
以下是代码:
#include <stdio.h>
#include <math.h>
int main()
{
int n;
double q;
while(scanf("%d %lf",&n,&q)!=EOF){
double term=1.0;
double sum=0.0;
for(int i=0;i<=n;i++){
sum+=term;
term*=q;}
printf("%.3lf\n",sum);
}
return 0;
}
while (scanf("%d %lf", &n, &q) != EOF) 是一个读取输入数据,直到达到文件结束(EOF)为止。
这个代码的关键部分是 sum+=term(将每个项term加到sum中) 以及 term*=q(用于计算下一个等比数列的项(将当前的项乘以公比q))。
另外要注意:i的范围是(0,n],(我一开始写错了i的范围,导致代码结果计算出错)。