?? 2.cpp
字號:
#include <iostream.h>
#include <string.h>
#define maxn 101
#define DIGIT 4
#define DEPTH 10000
#define MAX 100
typedef int bignum_t [MAX+1];
void add(bignum_t a,const bignum_t b){
int i;
for (i=1;i<=b[0];i++)
if ((a[i]+=b[i])>=DEPTH)
a[i]-=DEPTH,a[i+1]++;
if (b[0]>=a[0])
a[0]=b[0];
else
for (;a[i]>=DEPTH&&i<a[0];a[i]-=DEPTH,i++,a[i]++);
a[0]+=(a[a[0]+1]>0);
}
void write(const bignum_t a,ostream& os=cout){
int i,j;
for (os<<a[i=a[0]],i--;i;i--)
for (j=DEPTH/10;j;j/=10)
os<<a[i]/j%10;
}
bignum_t a1[maxn],cell[maxn];//a1紀(jì)錄每小時新產(chǎn)生的細(xì)胞,cell紀(jì)錄該小時細(xì)胞數(shù)
void precalc()
{
int i;
a1[2][0]=1;a1[1][1]=1;a1[1][0]=1;a1[3][1]=1;a1[3][0]=1;a1[4][1]=2;a1[4][0]=1;a1[5][0]=1;a1[5][1]=2;
for (i=6;i<maxn;i++)
{
memset(a1[i],0,sizeof(a1[i]));
a1[i][0] = 1;
add(a1[i],a1[i-2]);
add(a1[i],a1[i-3]);
add(a1[i],a1[i-3]);
add(a1[i],a1[i-4]);
}
cell[1][0]=1;cell[1][1]=1;
cell[2][0]=1;cell[2][1]=1;
cell[3][0]=1;cell[3][1]=2;
cell[4][0]=1;cell[4][1]=4;
for (i=5;i<maxn;i++)
{
memset(cell[i],0,sizeof(cell[i]));
cell[i][0] =1;
add(cell[i],a1[i]);
add(cell[i],a1[i-1]);
add(cell[i],a1[i-2]);
add(cell[i],a1[i-3]);
add(cell[i],a1[i-4]);
}
}
int main()
{
int i;
precalc();
cout<<"1~30小時后的細(xì)胞數(shù)"<<endl;
for (i=2;i<=31;i++)
{
cout<<i<<"小時候的細(xì)胞數(shù)為: ";
write(cell[i],cout);
cout<<endl;
}
cout<<endl;
cout<<"第100小時的細(xì)胞數(shù)為: ";
write(cell[100],cout);
cout<<endl;
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -