你知道 n 进制如何转化为 m 进制吗?

更好的阅读体验,请点击 进制转换 | YinKai's Blog


程序介绍:n 进制数转换器

这个简单的C++程序是一个 n 进制数转换器,可以将一个给定的 n 进制数按照用户指定的进制进行转换。用户需要提供三个输入:原始进制,待转换的数,目标进制。程序将按照指定进制进行转换,并输出结果。

程序设计:

1. 字符与数字的转换:

程序定义了两个函数 fun1fun2,用于字符与数字的相互转换。fun1 将字符转换为对应的数字,而 fun2 则将数字转换为相应的字符。这两个函数使用简单的映射关系,将字符 'A' 到 'F' 映射为数字 10 到 15。

2. 主函数:

  • 输入: 用户需要输入三个值,分别是原始进制 n、待转换的数 s 和目标进制 m

  • 转换过程: 程序通过循环遍历待转换的数 s 的每一位,将每一位字符转换为对应的数字,并根据当前位次计算出该位的值。然后,通过不断除以目标进制 m,将得到的余数转换为字符,并更新数字,直到原始数完全转换。

  • 输出: 最终,程序将得到的结果字符串输出。

示例:

如果输入为 10 ABCDEF 16,表示将十进制数 ABCDEF 转换为十六进制数,程序将输出结果 ABCDEF

如何使用:

用户可以根据需要修改输入值,实现不同进制之间的转换。该程序简洁明了,逻辑清晰,是一个学习进制转换的良好起点。

源程序:

#include 
​
using namespace std;
​
int fun1(char a) //字符转数字
{
    if (a == 'A') return 10;
    if (a == 'B') return 11;
    if (a == 'C') return 12;
    if (a == 'D') return 13;
    if (a == 'E') return 14;
    if(a=='F')  return 15;
    return int(a - '0');
}
​
char fun2(int a)
{
    if (a == 10) return 'A';
    if (a == 11) return 'B';
    if (a == 12) return 'C';
    if (a == 13) return 'D';
    if (a == 14) return 'E';
    if (a == 15) return 'F';
    return char (a + '0');
}
​
int main()
{
    long long n, m, p = 1, sum = 0;   //p为当前位次(百位,千位,万位等。)
    string s, res = "";
​
    cin >> n >> s >> m; //前进制,数,后进制
​
    //从低位到高位,将字符转换为数字
    for (int i = s.size() - 1; i >= 0; i --)
    {
        sum += fun1(s[i]) * p ;   //当前位等于转为为数字之后,乘上当前位次
        p *= n; //更新位次
    }
    //因为可能存在16进制,将当前数转换为字符串输出
    while (sum != 0)
    {
        res = fun2(sum % m) + res;   //由低位向高位逐级求出,然后放入答案
        sum /= m; //更新数字
    }
​
    cout << res << endl;
​
    return 0;
}
​

你可能感兴趣的:(c,++,编程题解,c++,算法,开发语言)