http://acm.hdu.edu.cn/showproblem.php?pid=1250
二维大数处理
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std ;
#define maxm 10005
#define maxn 305
int fi[ maxm ][ maxn ] ;
void Add()
{
memset( fi , 0 , sizeof( fi ) ) ;
fi [ 1 ][ 1 ] = fi[ 2 ][ 1 ] = fi[ 3 ][ 1 ] = fi[ 4 ][ 1 ] = 1 ;
int i , j , k ;
for( i = 5 ; i < maxm ; ++i )
{
int temp = 0 ;
for( j = 1 ; j < maxn ; ++j )
{
temp = temp + fi[ i - 4 ][ j ] + fi[ i - 1 ][ j ] + fi[ i - 2 ][ j ] + fi[ i - 3 ][ j ] ;
fi[ i ][ j ] = temp % 100000000 ;
temp = temp / 100000000 ;
}
}
}
int main()
{
Add();
int n ;
while( scanf( "%d" ,&n ) != EOF )
{
int i = maxn - 1;
while( fi[ n ][ i ] == 0 )
i-- ;
printf( "%d" , fi[ n ][ i-- ] ) ;
for( int j = i ; j >= 1 ; --j )
printf( "%08d" ,fi[ n ][ j ] ) ;
printf( "\n" ) ;
}
return 0 ;
}