您的位置:首页 > 其它

HDU - 5686 Problem B

2016-05-17 01:42 357 查看

1.题面

acm.hdu.edu.cn/showproblem.php?pid=5686

2.题意

中文题不解释题意

3.思路

经过思考会发现这是斐波那契数列,但是由于要求200项,所以要用大数运算.

不会用Java所有手写了一个大数

好在只需要写加法,不是很麻烦.

4.代码

/*****************************************************************
> File Name: Cpp_Acm.cpp
> Author: Uncle_Sugar
> Mail: uncle_sugar@qq.com
> Created Time: 2016年05月14日 星期六 20时23分59秒
*****************************************************************/
# include <cstdio>
# include <cstring>
# include <cctype>
# include <cmath>
# include <cstdlib>
# include <climits>
# include <iostream>
# include <iomanip>
# include <set>
# include <map>
# include <vector>
# include <stack>
# include <queue>
# include <algorithm>
using namespace std;

const int debug = 1;
const int size  = 100 + 10;
const int INF = INT_MAX>>1;
typedef long long ll;

struct bigint{
int num[size];
int len;
bigint():len(0){
memset(num,0,sizeof(num));
}
bigint(int n):len(0){
memset(num,0,sizeof(num));
while (n>0){
num[len++] = n%10;
n /= 10;
}
}
bigint operator + (const bigint& oper){
bigint ret;
int k = max(oper.len,len);
int rest = 0;
int i;
for (i=0;i<k;i++){
ret.num[i] = oper.num[i] + num[i] + rest;
rest = ret.num[i]/10;
ret.num[i] %= 10;
}
ret.len = k;
while (rest!=0){
ret.num[ret.len++] = rest%10;
rest /= 10;
}
return ret;
}
void Print(){
for (int i = len-1;i>=0;i--){
cout << num[i];
}
cout << endl;
}
};
bigint bi[200+10];
int main()
{
std::ios::sync_with_stdio(false);cin.tie(0);
int i,j;
bi[1] = bigint(1);
bi[2] = bigint(2);
for (i=3;i<=200;i++)
bi[i] = bi[i-1] + bi[i-2];
int n;
while (cin >> n){
bi
.Print();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: