C语言实现任意两种进制之间互相转换

题目描述

实现任意两种进制之间的互相转换,数值为非负整数。(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;
} 
发布了315 篇原创文章 · 获赞 931 · 访问量 106万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览