#
include
<stdio.h>
#
include
<stdlib.h>
#
include
<string.h>
#
include
<math.h>
#
include
<windows.h>
#define N 50
char * Ten_MoreThanTen(int, int);
int MoreThanTen_Ten(int, char []);
int Ten_LessThanTen(int, int);
int LessThanTen_Ten(int, int);
char
array
[N] =
"\0"
;
int LessThanTen_Ten(int before, int num)
{
double result = 0.0;
int i = 0;
for
(i = 0; num != 0; i++)
{
result += pow(before, i) * (num % 10);
num /= 10;
}
return
(int)result;
}
int Ten_LessThanTen(int after, int num)
{
double result = 0.0;
int i = 0;
for
(i = 0; num != 0; i++)
{
result += (num % after) * pow(10, i);
num /= after;
}
return
(int)result;
}
int MoreThanTen_Ten(int before, char num[])
{
int i = 0;
double result = 0.0;
int length =
strlen
(num);
for
(i = length - 1; i >= 0; i--)
{
if
('A' <= num[i] && num[i] <= 'Z')
result += pow(before, length - i - 1) * (num[i] - 55);
else
if
('a' <= num[i] && num[i] <= 'z')
result += pow(before, length - i - 1) * (num[i] - 87);
else
if
('0' <= num[i] && num[i] <= '9')
result += pow(before, length - i - 1) * (num[i] - 48);
}
return
(int)result;
}
char * Ten_MoreThanTen(int after, int num)
{
int i = 0;
int j = 0;
int tmp = 0;
char tmp_array[N] =
"\0"
;
for
(i = 0; num > 0; i++)
{
tmp = num % after;
if
(tmp < 10)
tmp_array[i] = tmp + '0';
else
tmp_array[i] = tmp + 'A' - 10;
num /= after;
}
for
(j = 0; i > 0; i--, j++)
{
array
[j] = tmp_array[i - 1];
array
[j + 1] = '\0';
}
return
array
;
}
int main()
{
int before = 0;
int after = 0;
int num1 = 0;
char array_num1[N] =
"\0"
;
int num2 = 0;
char *str_num2;
int tmp_num1 = 0;
int i = 0;
int m = 0;
while
(1)
{
printf(
"初始进制:"
);
scanf(
"%d"
, &before);
printf(
"目标进制:"
);
scanf(
"%d"
, &after);
printf(
"初始数值:"
);
if
(before > 10)
scanf(
"%s"
, array_num1);
else
scanf(
"%d"
, &num1);
for
(i = 0, tmp_num1 = num1; tmp_num1 != 0; i++)
{
if
((tmp_num1 % 10) <= before && tmp_num1 % 10 >= 0 && tmp_num1 % 10 <= 9)
m++;
tmp_num1 /= 10;
}
if
(m == i)
break
;
else
{
m = 0;
fflush
(stdin);
printf(
"输入有误!请重新输入:\n"
);
}
}
if
(before <= 10 && after <= 10)
{
num2 = Ten_LessThanTen(after, LessThanTen_Ten(before, num1));
printf(
"\n%d进制的%d对应的%d进制数为:%d\n"
, before, num1, after, num2);
}
else
if
(before > 10 && after <= 10)
{
num2 = Ten_LessThanTen(after, MoreThanTen_Ten(before, array_num1));
printf(
"\n%d进制的%s对应的%d进制数为:%d\n"
, before, array_num1, after, num2);
}
else
if
(before <= 10 && after > 10)
{
str_num2 = Ten_MoreThanTen(after, LessThanTen_Ten(before, num1));
printf(
"\n%d进制的%d对应的%d进制数为:%s\n"
, before, num1, after, str_num2);
}
else
if
(before > 10 && after > 10)
{
str_num2 = Ten_MoreThanTen(after, MoreThanTen_Ten(before, array_num1));
printf(
"\n%d进制的%s对应的%d进制数为:%s\n"
, before, array_num1, after, str_num2);
}
system(
"pause"
);
return
0;
}