牛客网——数制转换

题目描述

    求任意两个不同进制非负整数的转换(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)。

链接:https://www.nowcoder.com/questionTerminal/8ef02ef8571b417d8c311a87861f7a03
来源:牛客网

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int sum = 0, a, b;
    string n;
    int t = 49;
    int temp[50] = {0};
    cin >> a >> n >> b;//输入信息
    for (int i = 0; i < n.size(); i++)//转换为十进制
    {
        if (n[i] >= '0' && n[i] <= '9')
            sum = sum * a + n[i] - '0';
        else if (n[i] >= 'a' && n[i] <= 'z')
            sum = sum * a + n[i] - 'a' + 10;
        else if (n[i] >= 'A' && n[i] <= 'Z')
            sum = sum *a + n[i] - 'A' + 10;
    }
    while(sum > 0)//转换为b进制
    {
        temp[t--] = sum % b;
        sum /= b;
    }
    for (int i = t + 1; i < 50; i++)//输出
    {
        if (temp[i] >= 10)
        {
            cout << char('A' + temp[i] - 10);
        }
        else
            cout << temp[i];
    }
    cout << endl;
    return 0;
}

 

posted @ 2018-12-28 21:19  JAYPARK01  阅读(287)  评论(0编辑  收藏  举报