http://wikioi.com/problem/2877/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<bitset>
#include<iomanip>
using namespace std;
#define maxn 550
int sum[ maxn ] , fac[ maxn ] ;
int main()
{
int n ;
scanf( "%d" , &n ) ;
if( n == 0 )
printf( "0\n" ) ;
else
{
for( int i = 1 ; i <= maxn ; ++i )
{
sum[ i ] = 0 ;
}
for( int i = 1 ; i <= maxn ; ++i )
{
fac[ i ] = 0 ;
}
fac[ 1 ] = 1 ;
for( int i =1 ; i <= n ; ++i )
{
for( int j = 1 ; j<= maxn ; ++j )
{
fac[ j ] *= i ;
}
for( int j = 1 ; j <= maxn ; ++j )
{
fac[ j + 1 ] = fac[ j + 1 ] + fac[ j ] / 10 ;
fac[ j ] = fac[ j ] % 10 ;
}
for( int j = 1 ; j <= maxn ; ++j )
{
sum[ j ] = sum[ j ] + fac[ j ] ;
}
for( int j = 1 ; j <= maxn ; ++j )
{
sum[ j + 1 ] = sum[ j + 1 ] + sum[ j ] / 10 ;
sum[ j ] %= 10 ;
}
}
int i ;
for( i = maxn ; i > 0 ; --i )
{
if( sum[ i ] != 0 )
break ;
}
for( int j = i ; j > 0 ; --j )
printf( "%d", sum[ j ] ) ;
printf( "\n" ) ;
}
return 0 ;
}