题目简介
A[n] = F[n+2] / F[n+1], F[n]表示斐波那契数列第n项
求出这个数列的前 n 项之和。n <= 13
说明
- 数据较小,斐波那契数列直接打表了。不足的是居然没有
typedef long long ll;
(可能写的时候还不知道typedef是什么)。 - 分数运算处理起来略微麻烦一点。
- Linux下
“%I64d”
换成"%lld"
。
#include <stdio.h>
long long gcd(long long a, long long b)
{
return b == 0 ? a : gcd(b, a % b);
}
int main()
{
int f[15] = {1,1,2,3,5,8,13,21,34,55,89,144,233,377,610};
int t;
scanf("%d", &t);
while(t--){
int i, n;
scanf("%d", &n);
long long deno = 1, nume = 2;
for (i = 1; i < n; ++i){
nume = (nume * f[i + 1] + deno * f[i + 2]) / gcd(deno, f[i + 1]);
deno = deno * f[i + 1] / gcd(deno, f[i + 1]); //lcm
long long g = gcd(nume, deno);
nume /= g;
deno /= g;
}
printf("%I64d/%I64d\n", nume, deno);
}
return 0;
}