#include "stdafx.h"
const int upperbound = 5000;
template<int N>
int summation()
{
return (N * (N + 1))/2;
}
int get_generated_number( int generator )
{
int digit, remainder, gn;
digit = gn = generator;
do
{
remainder = digit % 10;
gn += remainder;
digit = digit / 10;
}while( digit != 0 );
return gn;
}
template<int N>
struct summation_of_self_generated_numbers
{
summation_of_self_generated_numbers()
{
for( int i = 0; i < UPPER; ++i )
{
set_[i] = false;
}
}
int summation()
{
int i = 0, sum = 0;
for(; i < UPPER; ++i )
{
int g = get_generated_number( i );
if( g < UPPER && set_[g] == false )
{
set_[g] = true;
sum += g;
}
}
return sum;
}
private:
enum { UPPER = N };
bool set_[N];
};
int _tmain(int argc, _TCHAR* argv[])
{
summation_of_self_generated_numbers<upperbound> sg;
wprintf_s( L"%d\n", summation<upperbound-1>() - sg.summation() );
return 0;
}
댓글 없음:
댓글 쓰기