hdu 1715

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

题意:算fibonacci数。

mark:大数运算。第1000个fib数只有200多位,直接打表好了。

代码:

# include <stdio.h>


int fib[1010][300] ;
char str[300] ;

void add(int a[], int b[], int c[])
{
int *p, *q ;
int i, cc = 0 ;
if(a[0]<b[0])p=a, q=b ;
else p = b, q=a ;
for(i = 1 ; i<= q[0] ; i++)
{
if(i<=p[0]) c[i] = p[i]+q[i]+cc ;
else c[i] = q[i]+cc ;
cc = c[i]/10 ;
c[i]%=10 ;
}
if (cc != 0) c[i++] = cc ;
c[0]= i-1 ;
}


int init()
{
int i ;
fib[0][0] = 1 ;
fib[1][0] = fib[1][1] = 1 ;
for (i = 2 ; i<= 1000 ; i++)
add(fib[i-2], fib[i-1], fib[i]) ;
}


char* numtostr(int num[300])
{
int i;
for(i = 1 ; i<= num[0] ; i++)
str[num[0]-i] = num[i]+'0' ;
str[num[0]] = '\0' ;
return str ;
}


int main ()
{
int n ;
init() ;
scanf ("%d", &n) ;
while (~scanf ("%d", &n))
puts (numtostr(fib[n])) ;
return 0 ;
}



posted @ 2012-02-16 06:52  Seraph2012  阅读(192)  评论(0编辑  收藏  举报