Tanky WooRSS

HDOJ 1715 大菲波数

08 Aug 2010
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1715


PS:刚才做题时,MiYu和我说,小A的大数模版在做菲波数有问题。。。 我就随口说了句:那你用我的大数模版。。。 过了一会,我密MiYu,不在,就看他最后做了哪题。 一看,原来是这题,怪不得,原来又是大数。。。 运气不错,以前都是代码随手写,今天难得写了一个 大数加大数大数减大数大数乘小数的模版 直接把自己模版COPY过来。结果出现全是乱码。。。汗了 以为自己的模版错了。仔细检查,原来在给f[1][0],f[2][0]赋值时, 是给的整型 1 , 而不是 char型的'1'。 改了后提交,一次AC。

呵呵,用自己的模版做,感觉真爽~~~~ 以前纯属废话。。。抒发下感情而已 [s:29]


代码:

// Author: Tanky Woo
// HDOJ 1715
// Accepted 1715 15MS 504K 1084 B C++ Tanky Woo 
#include
using namespace std;

// 大数加大数
// 大数a加上大数b,值赋给s
void big_Add_big(char a[], char b[], char s[])
{
    int m[1000], n[1000], p[1000];
    // 初始化
    memset(m, 0, sizeof(m));
    memset(n, 0, sizeof(n));
    memset(p, 0, sizeof(p));
    int len_a = strlen(a);
    int len_b = strlen(b);
    // 把a逆序赋给m整形数组
    for(int i=0; ilen_b? len_a: len_b;
    // 整体相加
    for(int i=0; i= 10)
        {
            p[i+1] += p[i]/10;
            p[i] = p[i]%10;
        }
    // 处理最高位
    if(p[len]>0)
        len++;
    for(int i=0; i<len; ++i)
        s[i] = p[len-i-1]+'0';
    s[len] = 0;
}

char f[1001][300];
int main()
{

    f[1][0] = '1';   // 先开始赋值1,结果出现乱码,粗心!
    f[2][0] = '1';
    for(int i=3; i<=1000; ++i)
        big_Add_big(f[i-1], f[i-2], f[i]);
    int nNum;
    scanf("%d", &nNum;);
    int n;
    for(int i=0; i<nNum; ++i)
    {
        scanf("%d", &n;);
        printf("%s\n", f[n]);
    }

    return 0;

}