进制转换

进制转换的基本算法是

 

 

n进制与十进制转换

如二进制

1011

1*2^3+0*2^2+1*2^2+1*2^0=11其它进制也同理



2^x为2的x次方

 

十进制与n进制转换

如254转为16进制

 

254%16   14(E)

254/16=15

15%16     15(F)

15/16=0结束

 

所以为FE

 

 

 

#include<iostream>
#include
<string>
#include
<stack>
using namespace std;
int getn(char x){//123456789ABCDFE这些,转为0-15的数字 
    if(x>='0'&&x<='9')    
    
return x-'0';
    
else
    
return x-'A'+10;
}

char getc(int x){//0-15的数字转为 123456789ABCDFE这些
    if(x<=9)    
    
return x+'0';
    
else
    
return x+'A'-10;
}

int main(){
    
int f,t;
    
string x;
    
while(cin>>f>>x>>t){
        
int temp=0;
        stack
<char> s;
        
bool isf=false;
        
for(int i=0;i<x.length();i++){//这个 就是f进制转十进制 的循环 
            if(x[i]=='-'//负号的处理,可以不计 
                     isf=true;
            
else
                     temp
=temp*f+getn(x[i]);//计算 十进制 
        }

     
if(temp==0){//对0的处理 
     s.push('0');
     isf
=false;
      }
    
        
while(temp){//因为余数要从后前前输出,所以用个栈 
            s.push(getc(temp%t));
            temp
/=t;
        }

        
if(isf)//如果是负的输出负号 
        cout<<"-";
        
while(!s.empty()){//输出结果 
            cout<<s.top();
            s.pop();
        }

        cout
<<endl;
    }

}

 

 

 

现在大家都熟悉了进制转换的放法了。现在又有难题让你解决了。
输入一个N(2<=N<=16)进制的数a,把它转换成M(M<=16)进制的数。
有多组测试数据,每组测试数据占一行。包括三个数N,a,M。
输出转化的M进制的数.
10-15 用大写字母A-F表示。

样例输入:

2 1010 10
16 EF 10

样例输出:

10
239

 

posted @ 2008-07-26 13:37  tiny羊  阅读(323)  评论(0)    收藏  举报