Sicily 1029 Rabbit

1366 ワード

タイトル:http://soj.me/1029
最初は大人のウサギのペアがいましたが、大人のウサギは月に一ペアずつ赤ちゃんを産むことができます。mとd(m==10、d==100)を与えます。mは赤ちゃんのウサギはmヶ月後に大人になり、dヶ月後にどれぐらいのウサギがいるかを聞きました。
アルゴリズムの実現:mとdは小さいので、直接シミュレーションできます。num[0]は大人のウサギの数を表し、num[i]はiヶ月の大人のウサギの数を表しています。d回num配列を更新すればいいです。最後の総数は大きいかもしれないので、高精度の方法を使います。
具体的なコード:
#include
#include
#include
#include
#define get_max(a,b) ((a)>(b)?(a):(b))
using namespace std;

const int maxn=200;

struct bign
{
    int len,s[maxn];
    bign()
    {
        memset(s,0,sizeof(s));
        len=1;
    }
    bign(int num)
    {
        *this=num;
    }
    bign operator = (const char *num)
    {
        len=strlen(num);
        for(int i=0;i>m>>d)
    {
        if(m==0&&d==0) break;
        num[0]=1;//num[0]          
        for(int i=1;i<=m;i++)
            num[i]=0;//num[i]    i          
        for(int i=1;i<=d;i++)
        {
            num[0]=num[0]+num[1];
            for(int i=1;i