进制转换
2008-07-26 13:37
302 查看
进制转换的基本算法是
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的数字
char getc(int x){//0-15的数字转为 123456789ABCDFE这些
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
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的数字
char getc(int x){//0-15的数字转为 123456789ABCDFE这些
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
相关文章推荐