地址: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 ;
}