进制转换问题

输入一个n进制数s,将其从n进制转换为m进制,并将转换后的数输出。

对于我来说是还债题 (因为不知道拖了多长时间了)。以前一直觉得麻烦,现在想想也还好。主要是注意数字s一定要用字符串存储(可能就是之前不会string才拖着的)

话不多说,直接上代码

// 进制转换.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
int n, m, num = 0, sum = 0, counts;
string s;
int num_change[10000];

int main()
{
    cout << "输入需要转化的数字:" << endl;
    cin >> s;
    cout << "输入原进制:" << endl;
    cin >> n;
    cout << "输入目的进制:" << endl;
    cin >> m;
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] < 'A')
        {
            num = pow(n, s.size() - i - 1);
            num *= s[i] - '0';
            sum += num;
        }
        else if (s[i] >= 'A')
        {
            num = pow(n, s.size() - 1 - i);
            num *= s[i] - 'A' + 10;
            sum += num;
        }
    }
    while (sum > 0)
    {
        num_change[counts++] = sum % m;
        sum /= m;
    }
    cout << "转换为" << m << "进制为: " << endl;
    for (int i = counts - 1; i >= 0; i--)
    {
        if (num_change[i] > 10) printf("%c", num_change[i] - 10 + 'A');
        else printf("%d", num_change[i]);
    }
    cout << endl;

    return 0;
}

运行结果


分类: 算法集

0 条评论

发表评论

Avatar placeholder

邮箱地址不会被公开。 必填项已用*标注