题目描述
实现任意两种进制之间的互相转换,数值为非负整数。(2进制~16进制)之间任意选择。
输入:包含三个参数,第一个参数为原本的进制,第二个参数为其数值,第三个参数为要转换的进制形式。
输出:输出要转换的进制形式
输入:
2 11010100 16
输出:
D4
输入:
16 D4 2
输出:
11010100
具体测试案例,自己多想想,我这边就不再提供了
思路:分两步,第一步,a进制转换为10进制,我们从a进制的最后一位开始研究。第二步,利用得到的十进制,将数据转换为我们现在所需要的b进制。
//实现任意两种进制之间的转换
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
int a,b;//a,代表本来所属禁止,b代表将要转换的进制
string data;//使用data来存放a类型的数据
char data_b[100];//存放b进制的数据
cin>>a>>data>>b;
int num_10=0;//作为中间变量,存储动态的中间10十进制
int value=1;//将value作为权重
for(int i=data.length()-1;i>=0;i--){//将源进制转换为十进制
int temp=0;
if(data[i]>='0'&&data[i]<='9')
temp=data[i]-'0';
else
temp=data[i]-'A'+10;//求出该位对应的10进制数
num_10+=temp*value;
value*=a;
}
cout<<"十进制数字为:"<<num_10<<endl;
int b_cnt=0;//存储b类型中字符的个数
do{
int temp=0;
temp=num_10%b;
num_10/=b;
if(temp>=10)
data_b[b_cnt++]=temp-10+'A';
else
data_b[b_cnt++]=temp+'0';
}while(num_10);
cout<<"b类型数据为:";
for(int i=b_cnt-1;i>=0;i--)
cout<<data_b[i];
cout<<endl;
return 0;
}