任意进制整数之间的相互转换(C++实现)
来源:互联网 发布:相机cf卡数据恢复 编辑:程序博客网 时间:2024/05/21 20:22
任意进制整数之间的相互转换经常出现在各大IT公司的笔试面试中,这里我对其中的算法和实现代码做个总结。
算法思想:例如,要求将x1进制的数r1转化成为x2进制的数r2,首先应该将r1转化为十进制的数r_decimal,然后再将十进制数r_decimal转化为x2进制的数r2。(1<x1<17&&1<x2<17)
下面是我用C++实现的代码,已经在visual C++ 6.0上测试通过了,程序没有考虑太多的细节(整数和进制合法性的判断等),主要是为了实现算法的思想,如果想做的再好一点,个人感觉应该用类实现,将整数封装成class。
例如,
class Number
{
private:
string num;
int binary;
public:
/*构造函数*/
Number(string num,int binary);//包含对数据合法性的检查
Number(Number num);
int convertToDecimal(string num,int binary);//将任意进制转化为十进制
string decimalToAnyBinary(int decimal,int binary);//将十进制转化为任意进制
Number ToAnyBinary(int binary);//将任意进制转化为任意进制
void showNumber();//打印整数信息
};
程序代码:
- #include <iostream>
- #include <string>
- #include <cmath>
- using namespace std;
- /*将一个整型数字转化成字符型数字,例如 8->'8',12->'c'*/
- char numToChar(char num)
- {
- /*num是0到9之间的数字*/
- if(num<=9&&num>=0)
- {
- num+=48;
- }
- /*num是10到15之间的数字*/
- else
- {
- switch(num)
- {
- case 10:num='A';
- case 11:num='B';
- case 12:num='C';
- case 13:num='D';
- case 14:num='E';
- case 15:num='F';
- }
- }
- return num;
- }
- /*将一个字符型数字转化成整型数字,例如 '8'->8,'c'->12*/
- int charToNum(char &num)
- {
- /*num是0到9之间的字符型数字*/
- if(num<='9'&&num>='0')
- {
- num-=48;
- }
- /*num是'A'到'F'之间的字符型数字*/
- else
- {
- switch(num)
- {
- case 'A':
- case 'a':
- num=10;
- case 'B':
- case 'b':
- num=11;
- case 'C':
- case 'c':
- num=12;
- case 'D':
- case 'd':
- num=13;
- case 'E':
- case 'e':
- num=14;
- case 'F':
- case 'f':
- num=15;
- }
- }
- return num;
- }
- /*将任意进制整数转化为十进制整数,返回转化后的十进制整数,num为任意进制整数,binary为该整数的进制*/
- int anyBinaryToDecimal(string num,int binary)
- {
- int len=num.size();
- int decimal_num=0;
- for(int i=0;i<len;i++)
- {
- decimal_num+=charToNum(num[i])*pow(binary,len-i-1);
- }
- return decimal_num;
- }
- /*将十进制转化为任意进制,decimal为十进制整数,binary为需要转化的进制*/
- void decimalToAnyBinary(int decimal,int binary)
- {
- string result;//保存x进制数
- char temp;
- while(decimal>0)
- {
- temp=decimal%binary;
- result+=numToChar(temp);
- decimal=decimal/binary;
- }
- /*输出转化后的x进制整数*/
- for(int i=result.size()-1;i>=0;i--)
- cout<<result[i];
- cout<<endl;
- }
- int main()
- {
- string num="1f";//十六进制数
- int decimal_num=anyBinaryToDecimal(num,16);//将十六进制数转化成十进制数
- cout<<decimal_num<<endl;//打印转化后的十进制数
- decimalToAnyBinary(decimal_num,8);//将十进制数转化成八进制数,并输出结果
- return 0;
- }
0 0
- 任意进制整数之间的相互转换(C++实现)
- 任意进制整数之间的相互转换(C++实现)
- 任意进制整数之间的相互转换(C++实现)
- C实现数制之间的相互转换
- 利用python实现任意进制的相互转换
- C++实现字符串和整数之间的相互转换
- C++实现——任意进制之间的转换
- 设计算法把一个十进制的整数转换成二至九进制之间的任意进制输出
- 进制之间的转换(整数)
- 任意进制相互转换
- 使用java语言实现进制之间的相互转换
- 使用java语言实现进制之间的相互转换
- 将任意的十进制整数转换成任意R进制数(R在2-16之间)
- 【C语言】任意进制之间的转换(支持小数部分)
- 任意整数转换为任意进制
- 任意进制之间的转换
- 【整理】C/C++中字符串与整数之间的相互转换
- 实现字符串和整数的相互转换
- 剑指Offer----面试题13:在O(1)时间删除链表结点
- iOS实践:天气App
- .balignl 16,0xdeadbeef浅析
- 2.5.位运算实战演练2--技术升级:用宏定义来完成位运算
- leetcode-Java-18. 4Sum
- 任意进制整数之间的相互转换(C++实现)
- Android WebView 加载横向进度条
- ROS中 package.xml CMakeList.txt launch文件
- rar
- 微信公众号开发--消息的接收与被动回复消息
- Android高级图片滚动控件,编写3D版的图片轮播器
- PAT Basic Level 1052. 卖个萌
- shiro与springMVC整合
- jstl 定义根据字符串返回map集合