题目:
问题 L: 序列求和
时间限制: 1 Sec 内存限制: 128 MB
提交: 989 解决: 702
[提交][状态][讨论版]
题目描述
有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
输入
N
输出
数列前N项和
样例输入
10
样例输出
16.48
代码块:
#include <stdio.h>
int main(void)
{
double a = 1;
double b = 2;
int i, n;
double temp;
double s = 0;
scanf("%d", &n);
for(i=0; i<n; i++)
{
s += b/a;
temp = a;
a = b;
b = temp+b;
}
printf("%0.2lf", s);
return 0;
}
题解:
这题我在一开始解的时候a, b, temp用的都是int型数据,以为只要用s += (double)b/a就行了。但实际上如果用int的话a和b在n较大的情况下会数值超限(int型大概10位数超限)导致出现负值,所以这里要用8字节的double或long型或者16字节的long long。