日期:2014-05-16 浏览次数:20675 次
#include "stdio.h"
#include "string.h"
#include "math.h"
#define MAX 100
int count = 0;
void str_to_num(char *num, int *temp, int len)
{
int i;
for (i = 0; i < len; i++)
{
if (num[i] <= '9' && num[i] >= '0')
temp[i] = num[i] - '0';
if (num[i] <= 'F' && num[i] >= 'A')
temp[i] = num[i] - 'A' + 10;
}
}
int from_to_ten(int *temp, int base_from, int len)
{
int i, ten = 0;
for (i = 0; i < len; i++)
ten += pow((double)base_from, len - i - 1) * temp[i];
return ten;
}
void ten_to_to(int ten, int base_to, int *temp)
{
if (ten / base_to != 0)
ten_to_to(ten / base_to, base_to, temp);
temp[count++] = ten % base_to;
}
void num_to_str(char *num, int *temp, int len)
{
int i;
for (i = len - 1; i >= 0; i--)
{
if (temp[i] <= 9 && temp[i] >= 0)
num[i] = temp[i] + '0';
if (temp[i] <= 16 && temp[i] >= 10)
num[i] = temp[i] + 'A' - 10;
}
num[len] = '\0';
}
int main(int argc, char **argv)
{
int base_from, base_to, temp[MAX], ten, len;
char num[MAX];
freopen("in.txt", "r", stdin);
while(scanf("%s%d%d", num, &base_from, &base_to) != EOF)
{
count = 0;
len = strlen(num);
str_to_num(num, temp, len);
ten = from_to_ten(temp, base_from, len);
ten_to_to(ten, base_to, temp);
if (count > 7)
printf("%7s\n", "ERROR");
else
{
num_to_str(num, temp, count);
printf("%7s\n", num);
}
}
return 0;
}