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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值