n进制数转为m进制

很简单的一道作业题,也是金山一道笔试题,算法上也没多大可说的,只是勤练练手吧。
算法步骤:
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
posted @ 2009-09-14 17:10 EricYang 阅读(...) 评论(...) 编辑 收藏