使用c++实现各种进制之间的转换
前言
我们最常见的进制转换就是十进制转换为二进制了,就是不停的作除法,取余数。
例如:十进制的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++实现各种进制之间的转换相关推荐
- java中各进制之间的转换(十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制)...
在java编辑中有没有遇到经常需要进行java中各进制之间的转换(十进制转十六进制.十进制转二进制.二进制转十进制.二进制转十六进制)的事情呢?下面我们就来分析一下各自是怎么转换的: [java] / ...
- 二进制-八进制-十进制-16进制之间的转换
进制之间的转换 主要用到连个函数: Convert.ToInt32(str,numbased):将字符串转成str,按照numbeased指定的进制转成10进制数: Convert.ToString( ...
- JAVA进制及进制之间的转换
进制 一.进制 二进制: 0.1 满二进一 以0b开头作为标识 在jdk1.7之前程序中无法直接书写一个二进制数字 八进制: 0~7,满8进1 要求以0做开头为标识 十进制 十六进制: 0~9.A~F ...
- 9277用计算机,关于计算机常用进制以及进制之间的转换笔记
计算机常用进制以及进制之间的转换 进制的由来 生活中的常用进制 计算机中的二进制 计算机常用四种进制的说明 八进制和十六进制 进制之间的转换 进制的由来 进位就是进位计数制,就是一种计数的方法 古代社 ...
- c 语言转换成php语言,C++_C 语言进制之间的转换,二进制、八进制和十六进制向 - phpStudy...
C 语言进制之间的转换 二进制.八进制和十六进制向十进制转换都是非常容易的,就是"按权相加". 所谓"权",也即"位权".例如,十进制第1位 ...
- 一篇关于不同进制之间的转换、比如二进制、八进制、十进制、十六进制等
1.其他进制转十进制二进制转十进制计算公式:从最低位开始(右边起),将每个位上的数提取出来,乘于2的(位数-1)次方,然后求和1101 =1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8 ...
- 计算机中各进制之间的转换
各进制之间的转换 由于有些时候总是会忘记一些各种进制之间的转换,长时间不用,就会比较模糊,所有就将其做个总结. 二进制转十进制 首先就相当于二进制数 个位数x20+十位数x21+百位数x22- 例子 ...
- Python中各种进制之间的转换
Python整数能够以十六进制,八进制和二进制来编写,作为一般以10位基数的十进制计数法的补充. 一: 上面三种进制的常用表示 >>> 0o1, 0o20, 0o377 # 八进制常 ...
- C++控制不同进制输出(二进制,八进制,十进制,十六进制)各种进制之间的转换
目录 1.输出(头文件讲解) 2.格式控制 常用的I/O流控制符 4.各种进制之间的转换(进制大乱斗) 4.1.写在前面 4.2整体框架搭建 4.3菜单函数 4.4用户输入选择(main函数体中) 4 ...
- 一.关于进制之间的转换关系
一.关于进制之间的转换关系 我们所说的百兆,千兆网络单位是bps(比特率,位/秒/bit/s),通常所说的百兆光纤也就是100Mps,而在实际应用中使用的传输单位是字节/秒(byte/s). 8bit ...
最新文章
- 机器狗背上枪成了无人杀手,6.5mm口径1200米射程,制造商已与美澳军队广泛合作...
- HNCU1101:马的移动---BFS
- 【C#】C#创建Windows Service服务
- POJ-3264-Balanced Lineup-单点更新
- Feature Pyramid Networks for Object Detection 论文笔记
- matlab inpainting,MATLAB-Python-inpainting-codes-master
- python中的logger之一
- c语言推箱子程序设计贴吧,推箱子问题
- 杀软自己做 编写autorun病毒免疫工具
- db9针232接口波特率标准_9针RS232-422-485接口定义
- Python 符号运算
- selenium下载文件
- PS-第十一天-通道抠图及剪贴蒙版
- 计算机硬件系统册组成,计算机硬件系统的组成教案.doc
- Tomcat 9 免安装版 配置教程
- Springer-Verlag免费下载图书400本
- 新手程序员必备10大技能
- linux中etc下的hosts(本地IP解析)文件详解
- ubuntu 16.04 编译android 7.1,jack报错
- 用Python玩转数据数据处理相关小例编程题
热门文章
- 笔记本电脑光驱位加固态硬盘,重装系统,UEFI启动,解决电脑开机慢的问题
- cocoa touch框架
- 如何使用视频格式转换器将flv转换成MP4
- 国内外已知SAR卫星相关信息整理(持续更新-2022.9.6)
- 定时网页截图php,浏览器实现网页定时自动截图
- 图像处理之LOMO特效
- oracle中db_create_file_dest参数
- 【LeetCode】重复的子字符串
- 局域网ip冲突检测工具_只需一台Android设备就能打通局域网内部通讯:文字聊天与文件传输...
- java mysql 分区表_mysql分区表