HDU - 5686 Problem B

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[n].Print();
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值