进制转换

#include <iostream>
#include <stdio.h>
#include <stack.h>
#include <assert.h>
#include <math.h>
using namespace std;
int main()
{
char digit[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
cout <<"输入待转换整数: ";
char c;
char a[80];
char b[80];
int i=0,j=0,length;
while ((c = getchar())!='\n') //输入
{a[i]=c;
 i++;
}
length=i;    //输入的数的位数  0~i-1
for(j=0;j<length;j++)   //转化成数值

  if( a[j]>='0' && a[j]<='9') 
  b[j] = a[j]-'0'; 
      else   if( a[j]>='a'&&a[j]<='f' ) 
             b[j]  =  a[j] -'a' +10; 
      else   if( a[j]>='A'&&a[j]<='F' ) 
              b[j] = a[j] -'A' +10; 
      else 
           continue;
 }
     
cout<<"输入的数是多少进制N:";
int n;
cin>>n;
assert((n>1)&&(n<=16));
int num=0;
for(i=0,j=length-1;j>=0;j--,i++)//输入的数转成十进制
{
 num+=b[i]*pow(n,j);
}
cout <<"转换成进制数M: ";
int m;
cin >>m;
cout <<endl;
assert((m>1)&&(m<=16));
stack<char> stk;
char remain;
while (num!=0)//转成M进制
{
 remain = digit[num%m];
 stk.push(remain);
   num/= m;
}
cout <<"结果: ";//输出结果
while(!stk.empty())
{
 cout <<stk.top();
 stk.pop();
}
cout <<endl;
return 0;
}

posted @ 2013-10-11 11:51  junxing  阅读(149)  评论(0)    收藏  举报