0
已解决
张恩泽
高级天翼
高级天翼
3022 斐波那契数列 经验值:2000
题目描述 Description
给出斐波那契数列的递推公式:
f(1) = 1
f(2) = 1
f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数)
请你求出 f(n) mod 1000000007 的值。
输入描述 Input Description
第 1 行:一个整数 n
输出描述 Output Description
第 1 行: f(n) mod 1000000007 的值
样例输入 Sample Input
输入样例#1: 5 输入样例#2: 10
样例输出 Sample Output
输出样例#1: 5 输出样例#2: 55
数据范围及提示 Data Size & Hint
对于 60% 的数据: n ≤ 92
对于 100% 的数据: n在long long(INT64)范围内。
//CODE
//#pragma GCC optimize(3)
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
string x, string y;
int a[1000], b[1000], c[2000];
string fib[100];
long long n;
string Plus (string x, string y) {
memset (a, 0, sizeof (a));
memset (b, 0, sizeof (b));
memset (c, 0, sizeof (c));
a[0] = x.size();
for (int i = 1; i <= a[0]; i ++) {
a[i] = x[a[0] - i] - '0';
}
b[0] = y.size();
for (int i = 1; i <= b[0]; i ++) {
b[i] = y[b[0] - i] - '0'
}
c[0] = max(a[0], b[0]);
int jw = 0;
for (int i = 1; i <= c[0]; i ++) {
c[i] = a[i] + b[i] + jw;
jw = c[i] / 10;
c[i] %= 10;
}
if (jw != 0) {
c[c[0]] = jw;
}
string ans = "";
for (int i = c[0]; i >= 1; i ++) {
ans += char(c[i] + '0');
}
return ans;
}
int main() {
// freopen ("题目名.in", "r", stdin);
// freopen ("题目名.out", "w", stdout);
fib[1] = "1";
fib[2] = "2";
cin >> n;
for (int i = 3; i <= n; i ++) {
fib[i] = Plus(fib[i - 1] + fib[i - 2]);
}
cout << fib[n];
// fclose (stdin);
// fclose (stdout);
return 0;//好习惯!
}
求各位大佬找错,30分