很简单的一道作业题,也是金山一道笔试题,算法上也没多大可说的,只是勤练练手吧。
算法步骤:
1、将n进制数转换为10进制;
2、将10进制数转换为m进制;
下面是程序代码(为了模块重用写做两个函数):
#include
<
stdio.h
>
#include
"
math.h
"
#include
"
string.h
"

#define
NUM_LENGTH 50


char
IntToChar[]
=
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}
;

//
Convert a char to integer ,like: F = 15
int
ConvertCharToInt(
char
ch)

{
switch(ch)

{
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
case 'A':
return 10;
case 'B':
return 11;
case 'C':
return 12;
case 'D':
return 13;
case 'E':
return 14;
case 'F':
return 15;
default:
return -1;
}
}

//
Convert A x-base number to tenbase
int
ConvertToTenBase(
const
char
*
result,
int
origBase)

{
int ret, i;
int len = strlen(result);
ret = 0;
for(i = 0; i < len; i++)

{
ret += ConvertCharToInt(result[len - 1 - i]) * pow(origBase, i);
}
return ret;
}

void
ReverseString(
char
*
str)

{
int i, j;
char temp;

if (str == NULL)

{
return;
}

for (i = 0, j = strlen(str) - 1; i < j; i++, j--)

{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}

//
Convert A Tenbase integer to dest base
void
ConvertToDestBase(
char
*
result,
int
tenBaseResult,
int
destBase)

{
int temp = 0, i = 0;
if (tenBaseResult == destBase)

{
return;
}
memset(result, 0, NUM_LENGTH);

while(tenBaseResult != 0)

{
temp = tenBaseResult % destBase;
tenBaseResult = tenBaseResult / destBase;
result[i] = IntToChar[temp];
i++;
}
ReverseString(result);
}

int
main()

{
char result[NUM_LENGTH];
int origBase;
int destBase;
int tenbaseResult;
// Input: number origBase destbase
scanf("%s%d%d", result, &origBase, &destBase);
// Convert To Ten Base
tenbaseResult = ConvertToTenBase(result, origBase);
// Convert to dest Base
ConvertToDestBase(result, tenbaseResult, destBase);
printf("%s\n", result);
system("pause");
}
当然,上面的程序并不完善,存在以下问题:
1、只能处理16进制以下的数的任意转换,这个问题易于解决,将IntToChar和ConvertCharToInt扩展几个数即可;
2、不能处理过大的数,这个问题解决起来也不太麻烦,见 http://www.cnblogs.com/phinecos/archive/2009/09/11/1564975.html;
算法步骤:
1、将n进制数转换为10进制;
2、将10进制数转换为m进制;
下面是程序代码(为了模块重用写做两个函数):



















































































































































当然,上面的程序并不完善,存在以下问题:
1、只能处理16进制以下的数的任意转换,这个问题易于解决,将IntToChar和ConvertCharToInt扩展几个数即可;
2、不能处理过大的数,这个问题解决起来也不太麻烦,见 http://www.cnblogs.com/phinecos/archive/2009/09/11/1564975.html;