当前位置: 代码迷 >> 综合 >> 紫书 习题 10-11 UVa 1646(斐波那契+高精度)
  详细解决方案

紫书 习题 10-11 UVa 1646(斐波那契+高精度)

热度:100   发布时间:2023-09-20 20:35:33.0

自己用手算一下可以发现是斐波那契数列,然后因为数字很大,用高精度

以后做题的时候记得算几个数据找规律 

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;const int MAXN = 11234;
const int MAXM = 2500;
struct node
{int len, d[MAXM];node() { len = 0; memset(d, 0, sizeof(d)); };
}f[MAXN];node add(node a, node b)
{node c;c.len = max(a.len, b.len);REP(i, 0, c.len){c.d[i] += a.d[i] + b.d[i];if(c.d[i] >= 10) c.d[i] -= 10, c.d[i+1]++;}if(c.d[c.len] > 0) c.len++;return c;
}void init()
{f[3].d[0] = 4; f[3].len = 1;f[4].d[0] = 7; f[4].len = 1;REP(i, 5, MAXN) f[i] = add(f[i-1], f[i-2]);
}void print(node c)
{for(int i = c.len - 1; i >= 0; i--)printf("%d", c.d[i]);puts("");
}int main()
{init();int n;while(~scanf("%d", &n))print(f[n]);return 0;
}