Мне нужно работать с 64-битными целыми числами.Я пытаюсь получить результат 36, возведенный в степень 12 как упражнение (и как требование).
Я использовал unsigned long long для 64-битного целого числа на моем компиляторе VS2008.Я сделал приведенный ниже код, и кто-то может мне объяснить, почему моя версия цикла for дает неверные результаты, а моя рекурсивная версия функции Power дает правильный результат?
К вашему сведению: 36, повышенное до 12, равно 4738381338321616896
template< typename _T1, typename _T2 >
_T1 Power( _T1 p_base, _T2 p_power )
{
/*
// This produces 0?!!
if( p_power == 0 ) return 1;
for( _T2 i = 1; i < p_power; ++i )
{
p_base *= p_base;
}
return p_base;
*/
// This produces correct result.
if( p_power == 0 ) return 1;
if( p_power == 1 ) return p_base;
return p_base * Power( p_base, p_power - 1 );
}
void main( int argc, char * argv[] )
{
unsigned long long charsetSize = 36LL;
printf( "Maximum Keys: %llu\n\n", Power( charsetSize, 12 ) );
system( "pause" );
}