Hdu 1197 Specialized Four-Digit Numbers

简单模拟:

CODE:

#include <stdio.h>
#include <stdlib.h>
#include < string.h>
#include <algorithm>
#include <stack>
#include <ctype.h>
#define min 2000
#define max 10000
using  namespace std;

const  int maxn =  101;
char s1[maxn], s2[maxn];
int tot1, tot2;


int init( int x)     // 计算一个数的树根之和 
{
     int sum =  0;
     while(x)
    {
        sum += x% 10;
        x /=  10;
    }
     return sum;
}


int  get( char *s)         // 计算12进制与16进制之和 
{
     int l = strlen(s);
     int sum =  0;
     for( int i =  0; i < l; i++)
    {
         char c = s[i];
         switch(c)
        {
             case  ' A ': sum +=  10; break;
             case  ' B ': sum +=  11; break;
             case  ' C ': sum +=  12; break;
             case  ' D ': sum +=  13; break;
             case  ' E ': sum +=  14; break;
             case  ' F ': sum +=  15; break;
             default : sum += c- ' 0 '; break;
        }
    }
     return sum;
}


void ten2d( int x)        // ten to duodecimal (base 12)
{
    stack< int> s;
     while(x)
    {
        s.push(x% 12);
        x /=  12;
    }
    tot1 =  0;
     while(!s.empty())
    {
         int t = s.top();
        s.pop();
         switch(t)
        {
             case  10: s1[tot1++] =  ' A '; break;
             case  11: s1[tot1++] =  ' B '; break;
             default: s1[tot1++] = t+ ' 0 '; break;
        }
    }
     return ;
}

void ten2h( int x)      // ten to hexadecimal (base 16)
{
    stack< int> s;
     while(x)
    {
        s.push(x% 16);
        x /=  16;
    }
    tot2 =  0;
     while(!s.empty())
    {
         int t = s.top();
        s.pop();
         switch(t)
        {
             case  10: s2[tot2++] =  ' A '; break;
             case  11: s2[tot2++] =  ' B '; break;
             case  12: s2[tot2++] =  ' C '; break;
             case  13: s2[tot2++] =  ' D '; break;
             case  14: s2[tot2++] =  ' E '; break;
             case  15: s2[tot2++] =  ' F '; break;
             default: s2[tot2++] =  ' 0 '+ t; break;
        }
    }
     return ;
}

int main()
{
     int i, j, k1, k2;
     int sum1, sum2;
     for(i = min ; i <= max ; i++)
    {
         int a, b;
        sum1 = sum2 =  0;
        memset(s1,  0sizeof(s1));
        memset(s2,  0sizeof(s2));
         int xx = init(i); 
        ten2d(i);    sum1 =  get(s1);  
        ten2h(i);    sum2 =  get(s2);
         if((xx == sum1) && (xx == sum2))
        {
            printf( " %d\n ", i);
        }    
    }
     return  0;

} 

你可能感兴趣的:(number)