进制转换是计算机内部时时刻刻都在进行活动,本篇文章也是进制转换的算法介绍,不过不同的是我想利用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. K8S环境快速部署Kafka(K8S外部可访问)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. insert into select 和select into from 备份表

    一 insert into select要求表必须存在 INSERTINTO order_record SELECT * FROM order_today FORCEINDEX (idx_pay_su ...

  3. LRU算法详解

    一.什么是 LRU 算法 就是一种缓存淘汰策略. 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置.但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留 ...

  4. kafka的基本安装与使用

    kafka的基本安装与使用 1.上官网下载tar包 2.解压 3.运行zookeeper 4.运行kafka服务器 5.创建topic 6.发送消息 7.监听消息 1.上官网下载tar包 https: ...

  5. [阿里DIN] 从模型源码梳理TensorFlow的乘法相关概念

    [阿里DIN] 从模型源码梳理TensorFlow的乘法相关概念 目录 [阿里DIN] 从模型源码梳理TensorFlow的乘法相关概念 0x00 摘要 0x01 矩阵乘积 1.1 matmul pr ...

  6. ps怎么抠图并和另一张图片合并?

    1.首先打开PS.然后随便选取两张图片.比如下图我想把那个小花朵扣出来移动到另外一张图片上. 2.用套锁工具把那个小花朵扣出来.如图我标出了套锁工具的图标.以及扣出来的小花朵.这里也可以选择" ...

  7. mybatis拦截器 修改mybatis返回结果集中的字段的值

    项目中使用了shardingJDBC,业务库做了分库,公共库没在一起,所以导致做码值转换的时候,需要在实现类里面做转码,重复的代码量大,故考虑用mybatis拦截器,将码值转换后再做返回给实现类.   ...

  8. 【RabbitMQ-7】RabbitMQ—交换机标识符

    死信队列概念 死信队列(Dead Letter Exchange),死信交换器.当业务队列中的消息被拒绝或者过期或者超过队列的最大长度时,消息会被丢弃,但若是配置了死信队列,那么消息可以被重新发布到另 ...

  9. Spider_基础总结2_Request+Beautifulsoup解析HTML

    静态网页 抓取实例: import requests from bs4 import BeautifulSoup def gettop250(): headers={ 'user-agent':'Mo ...

  10. java多线程---张孝祥

    1.java web 中,一次http请求是一个任务,因为服务器里面有线程池的,存在一个线程处理多个请求任务. 2.在java中,vector,hashtable,concurrentHashMap是 ...