简单模拟:

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;

} 

posted on 2012-07-18 17:12  有间博客  阅读(238)  评论(0编辑  收藏  举报