进制转换--C++实现

此类题的做法,是将任意进制数转换为十进制数,再由十进制数转换为任意进制数,不要忘记输出是A~F的特别处理。

题目描述:

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。     不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

输入描述:

 输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。
    数据可能存在包含前导零的情况。

输出描述:

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

输入

15 Aab3 7

输出

210306

C++实现:

#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
int main(){
    int m,n;
    char c[50];
    while(scanf("%d %s %d",&m,c,&n)!=EOF){
        long long num=0;
        for(int i=0;i<strlen(c);i++){
            if(c[i]>='a'&&c[i]<='f'){
                num+=(c[i]-'a'+10)*pow(m,strlen(c)-1-i);
            }
            else if(c[i]>='A'&&c[i]<='F'){
                num+=(c[i]-'A'+10)*pow(m,strlen(c)-1-i);
            }
            else
                num+=(c[i]-'0')*pow(m,strlen(c)-1-i);
        }
        int Num[50];
        int i=0;
        do{
            Num[i++]=num%n;
            num=num/n;
        }while(num!=0);
        if(n<=9)
        for(int j=i-1;j>=0;j--){
            cout<<Num[j];
        }
        else
            for(int j=i-1;j>=0;j--){
                if(Num[j]>=10){
                    cout<<(char)(Num[j]-10+'A');
                }
                else
            cout<<Num[j];
        }
        cout<<endl;
    }
}

 

发布了77 篇原创文章 · 获赞 49 · 访问量 12万+
展开阅读全文

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

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览