进制转换是计算机内部时时刻刻都在进行活动,本篇文章也是进制转换的算法介绍,不过不同的是我想利用ascll编码实现2到61之间任意进制的相互转换,更大进制的表示方法只不过是十六进制表示方法的延伸:用字母A到Z表示整数10到35,字母a到z表示整数36到61。这样就可以表示2到61之间的任意进制啦,为方便理解ascll表放在代码后面,可以自行查看。

下面直接给上代码:

 1 #include<iostream>
2 #include<cstring>
3 using namespace std;
4 void decToOther(int tmp, int b);
5 void otherToDec(int a, char str[], int b);
6 const int MAXSIZE = 10000;
7 int a, b;
8 char str[MAXSIZE];
9 int main()
10 {
11 while (cin >> a >> str >> b) //a、s、b分别为目前的进制、待转换的内容、目标进制
12 otherToDec(a, str, b); //统一先转换为10进制
13 return 0;
14 }
15
16 void otherToDec(int a, char str[], int b)
17 {//任意进制转换为十进制
18 int tmp = 0; //tmp保存十进制的值
19 int c = 1; //初始化权值为1
20 for (int i = strlen(str) - 1; i >= 0; i--)
21 {
22 int x; //存放当前位的数字
23 if (str[i] >= 'A' && str[i] <= 'Z') //字母A~Z表示整数10~35
24 x = str[i] - 'A' + 10;
25 else if (str[i] >= 'a' && str[i] <= 'z') //字母a~z表示整数36~61
26 x = str[i] - 'a' + 36;
27 else
28 x = str[i] - '0';
29 tmp = tmp + x * c; //累加将各个位上的值
30 c = c * a; //更新权值
31 }
32 decToOther(tmp, b); //由十进制转换为目标进制
33 }
34
35 void decToOther(int tmp, int b)
36 {//十进制转换为任意进制
37 int i = 0;
38 int s[MAXSIZE] = { 0 };
39 while (tmp != 0) //十进制转换为目标进制算法,结果放到数组s中
40 {
41 s[i] = tmp % b;
42 tmp= tmp / b;
43 i++;
44 }
45 cout << a << "进制数" << str << "的" << b << "进制表示为:";
46 for (; i > 0; i--) //利用ascll编码实现字母表示两位整数,并倒序输出转换结果
47 {
48 if (s[i - 1] > 9 && s[i - 1] <= 35)
49 cout << (char)(s[i - 1] + 55); //当s[i-1]为整数10时(char)(10+55)='A',输出'A'
50 else if (s[i - 1] > 35 && s[i - 1] <= 61)
51 cout << (char)(s[i - 1] + 61); //当s[i-1]为整数36时(char)(36+61)='a',输出'a'
52 else
53 cout << s[i - 1]; //个位数输出本身
54 }
55 cout << '\n';
56 }

示例:

附:ascll表

C++实现任意进制的相互转换的更多相关文章

  1. Python版任意进制转换

    def decimalToAny(num,n): baseStr = {10:"a",11:"b",12:"c",13:"d&qu ...

  2. poj1220 (高精度任意进制转换)

    http://poj.org/problem?id=1220 高精度任意进制转换 代码是从discuss里找到的,据说是maigo神牛写的. 超精简!! 我自己第一写的时候,还把n进制先转成10进制, ...

  3. 2~62位任意进制转换(c++)

    进制转换的符号表为[0-9a-zA-Z],共61个字符,最大可表示62进制. 思路是原进制先转换为10进制,再转换到目标进制. 疑问: 对于负数,有小伙伴说可以直接将符号丢弃,按照整数进行进位转换,最 ...

  4. 【C/C++】任意进制转换

    进制转换:R进制->10进制:10进制->R进制. #include<bits/stdc++.h> using namespace std; /*函数:r进制转换成10进制*/ ...

  5. C#十进制与任意进制的转换

    /// <summary> /// 将十进制转换为指定的进制 /// </summary> /// <param name="Val">十进制值 ...

  6. itoa()、atoi()、任意进制转换

    头文件:<stdlib.h> itoa --功能:将任意类型的数字转换为字符串.在<stdlib.h>中与之有相反功能的函数是atoi. atoi----功 能: 将字符串转换 ...

  7. python任意进制转换

    python任意进制转换 import string def module_n_converter(q, s, base=None): """ 将自然数按照给定的字符串转 ...

  8. js模拟栈---进制转化。十进制转任意进制进制,任意进制转十进制

    var Stack = (function(){ var items = new WeakMap(); //先入后出,后入先出 class Stack{ constructor(){ items.se ...

  9. python的十进制与任意进制的转换

    将任意进制转换成十进制 ", 8)) # 表示把8进制的54转换成十进制数并输出结果. # 8可以是2.8,10,16等进制数 将十进制转换成任意进制 def f(n,x): #n为待转换的 ...

随机推荐

  1. 假如把Redis服务器们拉到一个群,看看他们是怎么工作的?

    我是Redis,一个叫Antirez的男人把我带到了这个世界上. 那天,Redis基友群里,许久未见的大白发来了一条消息··· 于是,大白拉了一个新的群 以后的日子中,咱们哥仨相互配合,日常工作中最多 ...

  2. 前端之旅一:vscode调试web配置

    vscode调试web配置 第一步:安装vscode,并启动(vscode的安装包自行到其官网上下载) 第二步:在vscode上安装chrome插件 第三步:配置,启动调试 配置信息 { // Use ...

  3. 排序算法—快速排序(Quick Sort)

    快速排序(Quick Sort) 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序. ...

  4. salesforce零基础学习(九十八)Salesforce Connect & External Object

    本篇参考: https://trailhead.salesforce.com/en/content/learn/modules/lightning_connect https://help.sales ...

  5. 【QT】子类化QObject+moveToThread实现多线程

    往期链接: <QThread源码浅析> <子类化QThread实现多线程> 从往期<QThread源码浅析>可知,在Qt4.4之前,run 是纯虚函数,必须子类化Q ...

  6. 直播带货APP源码开发为什么选择云服务器

    云服务器可以为直播带货APP源码提供弹性计算以及更高的运行效率,避免资源浪费,随着直播带货APP源码业务需求的变化,可以实时扩展或缩减计算资源.CVM支持按实际使用的资源计费,可以节约计算成本. 一. ...

  7. leetcode68-search-in-rotated-sorted-array-ii

    题目描述 继续思考题目 "Search in Rotated Sorted Array": 如果数组种允许有重复元素怎么办? 会影响时间复杂度吗?是怎样影响时间复杂度的,为什么? ...

  8. SQL删除语句DROP、TRUNCATE、 DELETE 的区别

    主要介绍了SQL删除语句DROP.TRUNCATE. DELETE 的区别,帮助大家更好的理解和学习sql语句,感兴趣的朋友可以了解下 DROP: 1 DROP TABLE test; 删除表test ...

  9. 当Prometheus遇到混沌工程

    一.背景 最近容器组在开发云平台的监控.报警功能. 大致的实现策略是: 1.云平台页面上配置告警规则 2.Prometheus完成监控数据的聚合 3.当Prometheus聚合后的监控数据满足告警规则 ...

  10. python学习--sys.argv

    sys.argv是获取命令行参数的: sys.argv[0]表示代码本身文件路径:从1开始获取参数. import sysprint (sys.argv[0])count = int(sys.argv ...