前言

我们最常见的进制转换就是十进制转换为二进制了,就是不停的作除法,取余数。

例如:十进制的10转换为二进制

10÷2=5···0

5÷2=2···1

2÷2=1···0

1÷2=0···1

直到商为0,然后把余数倒着写,所以10的二进制表示为1010。

十进制->N进制

会了十进制转换为二进制,那么十进制转换为任意进制也就迎刃而解了,只要不停的除法和取余就好了。

#include <iostream>
#include <cstdio>
#include <stack>
/** 进制转换 10——>n(n<10)* */
using namespace std;void ConvertT2N(int number,int n){stack<char> s;if (number == 0) {  //特殊情况,当输入是0时,输出也是0,否则输入0时就卡那了s.push(0);} else {while (number) {s.push(number % n);number /= n;}}// 把栈中的余数输出while (!s.empty()) {printf("%d", s.top());s.pop();}printf("\n");
}
int main(){int number;while (scanf("%d", &number) != EOF) {ConvertT2N(number, 2);}return 0;
}

但是上面的代码是有一点小问题的,它只能转换10以内的进制,也就是N必须小于10,否则就会出错。例如十进制转换成十六进制就会出错。例如11转换成十六进制表示为b而不是11,因为当表示十进制以上的数时需要用到字母a,b,c,d等等。

所以需要在输出的余数上面加加工一下,把大于10的数用字母表示。

改进版代码如下:

#include <iostream>
#include <cstdio>
#include <stack>using namespace std;// 把整数转换成对应进制的字符,例如10的十六进制中表示为A
char Int2Char(int target){if (target < 10) {return target + '0';} else {return target - 10 + 'A';}
}
/** 现在N可以取任意进制了* */
void ConvertT2N(int number,int n){stack<char> s;  //因为要存字母所以用charif (number == 0) {  //特殊情况,当输入是0时,输出也是0,否则输入0时就卡那了s.push(0);} else {while (number) {s.push(Int2Char(number % n)); //在余数入栈时加工一下,把int转换成charnumber /= n;}}// 把栈中的余数输出while (!s.empty()) {printf("%c", s.top());s.pop();}printf("\n");
}
int main(){int number;while (scanf("%d", &number) != EOF) {ConvertT2N(number, 16);//把十进制转换为十六进制}return 0;
}

N进制转换成十进制

会了十进制转换为N进制,那么把N进制转换为十进制倒着来就好了,不停的乘N,加上余数。

例如:二进制的1010转换为十进制

0*2+1=1

1*2+0=2

2*2+1=5

5*2+0=10

#include<iostream>
#include<cstdio>using namespace std;
/** 进制转换 N->10* */
// 先把字母转换成数字
int Char2Int(char target) {if (target >= '0' && target <= '9') {return target - '0';} else {return target - 'A' + 10;}
}
void ConverM2T(string str,int m){int number = 0; //该数在10进制下的表示for (int i = 0; i < str.size(); ++i) {number *= m;number += Char2Int(str[i]);}printf("%d\n", number);
}int main(){string str;while (cin >> str) {ConverM2T(str,16); //把十六进制转换为十进制}return 0;
}

M进制转换为N进制

上述前两个都会了以后,实现把M进制转换成N进制了,思路是先把M进制转换成十进制,然后再把十进制的数转换成N进制。

#include <iostream>
#include <cstdio>
#include <stack>
#include <string>
using namespace std;
/** M进制转换成N进制* */
int Char2Int(char target) {if (target >= '0' && target <= '9') {return target - '0';} else {return target - 'A' + 10;}
}
// M进制转换成十进制的数返回
int ConverM2T(string str,int m){int number = 0; //该数在10进制下的表示for (int i = 0; i < str.size(); ++i) {number *= m;number += Char2Int(str[i]);}return number;
}char Int2Char(int target){if (target < 10) {return target + '0';} else {return target - 10 + 'a';}
}
//十进制转换成N进制
void ConvertT2N(int number,int n){stack<char> s;while (number) {s.push(Int2Char(number % n));number /= n;}if (s.empty()) {    //当输入是0时,输出也是0printf("0");}while (!s.empty()) {printf("%c", s.top());s.pop();}printf("\n");
}int main(){int m,n;while (scanf("%d%d",&m,&n)!=EOF){string str;cin >> str;int number = ConverM2T(str, m);// M进制转换成十进制的数返回// 再把该数转换成N进制ConvertT2N(number, n);}return  0;
}

使用c++实现各种进制之间的转换相关推荐

  1. java中各进制之间的转换(十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制)...

    在java编辑中有没有遇到经常需要进行java中各进制之间的转换(十进制转十六进制.十进制转二进制.二进制转十进制.二进制转十六进制)的事情呢?下面我们就来分析一下各自是怎么转换的: [java] / ...

  2. 二进制-八进制-十进制-16进制之间的转换

    进制之间的转换 主要用到连个函数: Convert.ToInt32(str,numbased):将字符串转成str,按照numbeased指定的进制转成10进制数: Convert.ToString( ...

  3. JAVA进制及进制之间的转换

    进制 一.进制 二进制: 0.1 满二进一 以0b开头作为标识 在jdk1.7之前程序中无法直接书写一个二进制数字 八进制: 0~7,满8进1 要求以0做开头为标识 十进制 十六进制: 0~9.A~F ...

  4. 9277用计算机,关于计算机常用进制以及进制之间的转换笔记

    计算机常用进制以及进制之间的转换 进制的由来 生活中的常用进制 计算机中的二进制 计算机常用四种进制的说明 八进制和十六进制 进制之间的转换 进制的由来 进位就是进位计数制,就是一种计数的方法 古代社 ...

  5. c 语言转换成php语言,C++_C 语言进制之间的转换,二进制、八进制和十六进制向 - phpStudy...

    C 语言进制之间的转换 二进制.八进制和十六进制向十进制转换都是非常容易的,就是"按权相加". 所谓"权",也即"位权".例如,十进制第1位 ...

  6. 一篇关于不同进制之间的转换、比如二进制、八进制、十进制、十六进制等

    1.其他进制转十进制二进制转十进制计算公式:从最低位开始(右边起),将每个位上的数提取出来,乘于2的(位数-1)次方,然后求和1101 =1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8 ...

  7. 计算机中各进制之间的转换

    各进制之间的转换 由于有些时候总是会忘记一些各种进制之间的转换,长时间不用,就会比较模糊,所有就将其做个总结. 二进制转十进制 首先就相当于二进制数 个位数x20+十位数x21+百位数x22- 例子 ...

  8. Python中各种进制之间的转换

    Python整数能够以十六进制,八进制和二进制来编写,作为一般以10位基数的十进制计数法的补充. 一: 上面三种进制的常用表示 >>> 0o1, 0o20, 0o377 # 八进制常 ...

  9. C++控制不同进制输出(二进制,八进制,十进制,十六进制)各种进制之间的转换

    目录 1.输出(头文件讲解) 2.格式控制 常用的I/O流控制符 4.各种进制之间的转换(进制大乱斗) 4.1.写在前面 4.2整体框架搭建 4.3菜单函数 4.4用户输入选择(main函数体中) 4 ...

  10. 一.关于进制之间的转换关系

    一.关于进制之间的转换关系 我们所说的百兆,千兆网络单位是bps(比特率,位/秒/bit/s),通常所说的百兆光纤也就是100Mps,而在实际应用中使用的传输单位是字节/秒(byte/s). 8bit ...

最新文章

  1. 机器狗背上枪成了无人杀手,6.5mm口径1200米射程,制造商已与美澳军队广泛合作...
  2. HNCU1101:马的移动---BFS
  3. 【C#】C#创建Windows Service服务
  4. POJ-3264-Balanced Lineup-单点更新
  5. Feature Pyramid Networks for Object Detection 论文笔记
  6. matlab inpainting,MATLAB-Python-inpainting-codes-master
  7. python中的logger之一
  8. c语言推箱子程序设计贴吧,推箱子问题
  9. 杀软自己做 编写autorun病毒免疫工具
  10. db9针232接口波特率标准_9针RS232-422-485接口定义
  11. Python 符号运算
  12. selenium下载文件
  13. PS-第十一天-通道抠图及剪贴蒙版
  14. 计算机硬件系统册组成,计算机硬件系统的组成教案.doc
  15. Tomcat 9 免安装版 配置教程
  16. Springer-Verlag免费下载图书400本
  17. 新手程序员必备10大技能
  18. linux中etc下的hosts(本地IP解析)文件详解
  19. ubuntu 16.04 编译android 7.1,jack报错
  20. 用Python玩转数据数据处理相关小例编程题

热门文章

  1. 笔记本电脑光驱位加固态硬盘,重装系统,UEFI启动,解决电脑开机慢的问题
  2. cocoa touch框架
  3. 如何使用视频格式转换器将flv转换成MP4
  4. 国内外已知SAR卫星相关信息整理(持续更新-2022.9.6)
  5. 定时网页截图php,浏览器实现网页定时自动截图
  6. 图像处理之LOMO特效
  7. oracle中db_create_file_dest参数
  8. 【LeetCode】重复的子字符串
  9. 局域网ip冲突检测工具_只需一台Android设备就能打通局域网内部通讯:文字聊天与文件传输...
  10. java mysql 分区表_mysql分区表