蓝桥杯基础之16进制、10进制、8进制、2进制换算总结

常用函数的一些小总结

string to int(字符串转到int类型)

#include<sstream>    //重要的库
#include<iostream>
#include<string>

using namespace std;

int str2int(string str){
   
    stringstream ss;
    int value;
    ss<<str;	//将字符串传到ss流中
    ss>>value;	//将 流 传到int类型的value中
    ss.clear();
    return value;
}

int to string(int转换到string)

原理是一样的,都是ss流来转换,只不过反过来而已

string int2str(int value){
   
    stringstream ss;
    string str;
    ss<<value;
    ss>>str;
    ss.clear();
    return str;
}

关于进制换算

比如16进制、10进制、8进制到8进制、10进制,我认为都可以通过转成2进制来转换。

进制换算目前我总结起来,有两大类,第一类有两种方法(倒余除法、位权值法),第二类只有一种方法(一 一对应法)。

第一类 10进制的转换和被转换(不讨论小数部分)(n进制 to 10或者10 to n进制)

1.倒余除法 用于10进制到n进制

10->16
10->8
10->2

例如
10进制下的数值28 转成 8进制
在这里插入图片描述
【商,余数】=(被除数,除数)
【3,4】=(28,8)
【0,3】=(3,8)

得到余数 4 、3 ,将余数的序列倒过来就变成了8进制的转化结果34。

2.位权值法 用于n进制到10进制

(所有方法的名字我是随便想的,别介意)

如:
16->10
8->10
2->10
就是用他们的数码*原来进制的位权之和(通俗的理解就是,该数字所在的位置的权重)

比如 10进制的523->10进制
523 = 5X100+2X10+3X1(其中5、2、3称为数码,100、 10 、1 称为位权)=523

比如 16进制的C35 ->10进制

C35 = C X 16的2次方+3 X 16的1次方 + 5 X 16的0次方 = …(自己计算)

第二类 n进制 to 2 或者 2 to n进制(n不包括10)

方法: 一一对应

1.

16进制、8进制 —> 2进制

n进制 可以用 k位2进制数来表示
16进制 可以用 4位2进制来表示
8进制 可以用 3位2进制数来表示

我们以16进制为例
C59(16进制) =???(2进制)
在这里插入图片描述

在这里插入图片描述
C对应的二进制是1100
5对应的二进制是0101
9对应的二进制是1001
顺序组合下来就是答案110001011001

8进制转2进制类似,就是将每一位数字表示为对应的二进制数字串,然后顺序组合起来。

2.

2进制—> 8进制、 16 进制
方法就是第1.倒过来

举例:
(2进制) 110001011001 = ???(8进制)

在这里插入图片描述
在这里插入图片描述
如果2进制数字串划分为几个3位(8进制)或者4位(16进制)的小组不够长度,就需要在最开始的前面补一个0或者两个0,直到补够为长度是3的倍数为止。

蓝桥杯题目 十六进制转八进制

思路

先将十六进制(Hexadecimal)转为二进制(Binary)
再讲二进制转到八进制(Octal)

于是,先用一 一对应法将16转换为2进制,再用一 一对应发由2进制到8进制。

#include<iostream>
#include<string>  //字符串
#include<cctype>
#include<algorithm> 
#include<tgmath.h>
#include<sstream>

using namespace std;

//蓝桥杯好像不允许str。to_string()通过,所以换个方法
string toString(int value){
   
	string str;
	stringstream ss;
	ss << value;
	ss >> str;
	ss.clear();  //清楚这个流中残留的数据
	return str;
}


string hexaToBina<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值