BigNums——HDUOJ 1715 - 大菲波数(预处理)
2017-10-21 18:10
176 查看
原题:
Problem DescriptionFibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项Fibonacci数值。
Input
输入第一行为一个整数N,接下来N行为整数Pi(1<=Pi<=1000)。
Output
输出为N行,每行为对应的f(Pi)。
Sample Input
5
1
2
3
4
5
Sample Output
1
1
2
3
5
这道题就是HDUOJ 1316 - How Many Fibs?的简易版,通过预处理,再直接数组定位到答案就好了,需要注意的是F1 = F2 = 1
解题思路:
1. 使用string比直接char[]节省内存占用,有c++库函数,用起来方便
2. 预处理:通过string数组先将前1000个斐波那契数字算好,存起来
3. 注意答案的输出格式
代码:
#include<stdio.h> #include <string> #include <iostream> using namespace std; const int MAXFIB = 1001;//斐波那契个数 string sum[MAXFIB]; void Add(int num) { int i; int LengthOfTow = sum[num - 1].length() - sum[num - 2].length();//两个数相差的长度 int temp; short CarryBit = 0;//进位 for (i = sum[num - 2].length() - 1; i >= 0; i--)//从两个数中小的数[F(n-2)]开始,再从**string**数组元素倒退,逐个加法进位 { temp = (sum[num - 2][i] - '0') + (sum[num - 1][i + LengthOfTow] - '0') + CarryBit; CarryBit = temp / 10; sum[num] = char((temp % 10) + '0') + sum[num]; } for (i = i + LengthOfTow; i >= 0; i--)//从两个数中大的数[F(n-1)]开始进位 { temp = (sum[num - 1][i] - '0') + CarryBit; CarryBit = temp / 10; sum[num] = char((temp % 10) + '0') + sum[num]; } if (CarryBit != 0)//两数相加,总数位数最多是大数位数+1 { sum[num] = char(CarryBit + '0') + sum[num]; } } void PreFibonacci()//预处理 { sum[0] = "1"; sum[1] = "1"; int i; for (i = 2; i < MAXFIB; i++) { Add(i); //cout <<i << " "<< sum[i] << endl; } } int main() { int N; int Pi; PreFibonacci(); scanf("%d", &N); while (N--) { scanf("%d", &Pi); cout << sum[--Pi] << endl; } }
相关文章推荐
- BigNums——HDUOJ 1316 - How Many Fibs?(斐波那契个数 + 二分法 + 预处理)
- 【杭电】[1715]大菲波数
- BigNums——HDUOJ 1063 - Exponentiation(高精度幂)
- BigNums——HDUOJ 1002 - A + B Problem II
- BigNums—— 斐波那契 预处理(代码)
- BigNums——HDUOJ 1042 - N!
- BigNums——HDUOJ 1047 - Integer Inquiry(多个大数相加)
- hdu1715 大菲波数
- 编译原理 (预处理>编译>汇编>链接)
- UVa10856 - Recover Factorial(预处理+二分)
- C语言——数组、函数、预处理
- hduoj1001(Sum Problem)
- C语言预处理之条件编译。
- HDUOJ------3336 Count the string(kmp)
- BestCoder Round #3 1001 && HDU 4907 Task schedule (预处理)
- HDU-4907 Task schedule 预处理
- hduoj----1142A Walk Through the Forest(记忆化搜索+最短路)
- VS中添加预处理宏的方法
- (预处理,初始化)近似回文词 Almost Palindrome,9th湖南省赛A
- Codeforces 106D Treasure Island 预处理前缀和+暴力(水