玩命加载中 . . .

数制转换


http://t.cn/AiCu6ne4

描述

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

示例1

输入:

15 Aab3 7

输出:

210306
#define _CRT_SECURE_NO_WARNINGS 1
#include <bits/stdc++.h>
using namespace std;

//数字转字符
char IntToChar(int x) {
    if (x < 10)
        return x + '0';
    else
        return x - 10 + 'A';
}

//字符转数字
int CharToInt(char c) {
    if (c >= '0' && c <= '9')
        return c - '0';
    else if (c >= 'A' && c <= 'Z')
        return c + 10 - 'A';
    else if (c >= 'a' && c <= 'z')
        return c + 10 - 'a';
    else
        return -1;
}

int main() {
    int a, b;
    string str;
    while (cin >> a >> str >> b) {
        long long number = 0;
        //a进制转10进制
        for (int i = 0; i < str.size(); ++i) {
            number *= a;
            number += CharToInt(str[i]);
        }
        //10进制转b进制
        vector<char> answer;
        if (number == 0)
            answer.push_back('0');
        else {
            while (number != 0) {
                answer.push_back(IntToChar(number % b));
                number /= b;
            }
        }
        for (int i = answer.size() - 1; i >= 0; --i)
            cout << answer[i];
        cout << endl;
    }
    return 0;
}

文章作者: Jack Tim
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Tim !
评论
  目录