简单模拟:
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, 0, sizeof(s1));
memset(s2, 0, sizeof(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;
#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, 0, sizeof(s1));
memset(s2, 0, sizeof(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;
}