Faktorijel za bilo koje N :)
Code:
// factoriel.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <vector>
using namespace std;
void dump( vector<int> &result, int fac )
{
printf( "[%d]! = ", fac );
for ( int i = result.size() - 1; i > -1; --i ) printf( "%d", result[i] );
printf( "\n" );
}
void dump( vector<int> &result, char *debugName )
{
printf( "[%s]%d:", debugName, result.size() );
for ( int i = result.size() - 1; i > -1; --i ) printf( "%d", result[i] );
printf( "\n" );
}
int GetAt( vector<int> &result, int at )
{
if ( at < result.size() ) return result[at];
else return 0;
}
void SetAt( vector<int> &result, int at, int value )
{
if ( at < result.size() ) result[at] = value;
else {
while ( at > result.size() ) result.push_back( 0 );
result.push_back( value );
}
}
void add( vector<int> &out, vector<int> &result )
{
int i = 0;
int c = 0;
for ( ; i < max( out.size(), result.size() ); ++i )
{
int val = GetAt( out, i ) + GetAt( result, i ) + c;
c = val / 10;
SetAt( out, i, val % 10 );
}
while ( c )
{
SetAt( out, i, c % 10 );
++i;
c /= 10;
}
}
void mul( long n, vector<int> &result )
{
vector<int> tempResult;
vector<int> outResult;
for ( int i = 0; i < result.size(); ++i )
{
tempResult.clear();
long r = GetAt(result, i)*n;
int k = i;
while ( r )
{
SetAt( tempResult, k, r % 10 );
++k;
r /= 10;
}
add( outResult, tempResult );
}
for ( int i = 0; i < outResult.size(); ++i )
{
SetAt( result, i, outResult[i] );
}
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> result;
result.push_back( 1 );
long N = 100;
for ( long i = 1; i < N; ++i )
{
mul( i, result );
dump( result, i );
}
return 0;
}