这篇博客是从旧博客 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;
}