蓝桥杯上岸必刷!!! (进制、数位专题)

蓝桥杯上岸必刷!!!(进制、数位专题)

距离蓝桥杯省赛倒数最后1天 ❗️ ❗️ ❗️

还没背熟模板的伙伴们背起来 💪 💪 💪

大家好 我是寸铁💪

真题千千万万遍,蓝桥省一自然现! ✌️

日更3000里,蓝桥眷顾你 🌟

暴力出奇迹,打表过样例 👊

冲刺蓝桥杯省一模板大全来啦 🔥

蓝桥杯4月8号就要开始了 🙏

距离蓝桥杯省赛倒数第3天 ❗️ ❗️ ❗️

还没背熟模板的伙伴们背起来 💪 💪 💪

真题千千万万遍,蓝桥省一自然现! ✌️

日更3000里,蓝桥眷顾你 🌟

暴力出奇迹,打表过样例 👊

祝大家4月8号蓝桥杯上岸 ☀️

不清楚蓝桥杯考什么的点点下方👇

考点秘籍

想背纯享模版的伙伴们点点下方👇

蓝桥杯省一你一定不能错过的模板大全(第一期)

蓝桥杯省一你一定不能错过的模板大全(第二期)

蓝桥杯省一你一定不能错过的模板大全(第三期)

蓝桥杯省一你一定不能错过的模板大全(第四期)!!!

想背注释模版的伙伴们点点下方👇

蓝桥杯必背第一期

蓝桥杯必背第二期

往期精彩回顾

蓝桥杯上岸每日N题 第一期(一)!!!

蓝桥杯上岸每日N题第一期(二)!!!

蓝桥杯上岸每日N题第一期(三)!!!

蓝桥杯上岸每日N题第二期(一)!!!

蓝桥杯上岸每日N题第三期(一)!!!

蓝桥杯上岸每日N题 第四期(最少刷题数)!!!

蓝桥杯上岸每日N题 第五期(山)!!!

蓝桥杯上岸每日N题 第六期(求阶乘)!!!

蓝桥杯上岸每日N题 第七期(小猫爬山)!!!

蓝桥杯上岸每日N题 第八期 (全球变暖)!!!

操作系统期末题库 第九期(完结)

LeetCode Hot100 刷题(第三期)

idea创建SpringBoot项目报错解决方案

数据库SQL语句(期末冲刺)

想看JavaB组填空题的伙伴们点点下方 👇

填空题

竞赛干货

算法竞赛字符串常用操作大全

蓝桥杯上岸必刷!!!(模拟/枚举专题)

蓝桥杯上岸必背!!! (第三期 DP)

蓝桥杯上岸必背!!!(第四期DFS)

蓝桥杯上岸必背!!!(第五期BFS)

蓝桥杯上岸必背!!!(第六期树与图的遍历)

蓝桥杯上岸必背!!!(第七期 最短路算法)

蓝桥杯上岸必背!!!(第八期 简单数论)


前言

喜欢的小伙伴可以关注我,关注寸铁,我们一起上岸4.8蓝桥杯!!!

内存转换

Byte:字节(B)
bit:位(b)
1 Byte = 8 bit
int = 4Byte=32bit
long = 8Byte=64bit


基于1024这个数进行换算
1TB=1024GB
1GB=1024MB
1MB=1024KB
1KB=1024B
1B=8b

真题

空间
问题描述:
小蓝准备用 256MB 的内存空间开一个数组,数组的每个元素都是 32 位二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问256MB 的空间可以存储多少个 32 位二进制整数?

分析

1个位等于1个bit(b),32个位等于32个bi
1个B等于8个b,32个位等于32/8=4个B
问题就转换为问:256MB可以换成多少个4个B
我们来换算一下:

256MB=256*1024KB=256*1024*1024B=268435456B

256MB总共有268435456个B,直接除以4即得答案。
答案:67108864

取数位

核心常用

while(x!=0){
    int a=x%10;//a存的是取出的每一个数位
    x/=10;

}

如果是比较一个数字中的两个数位的大小
不妨用:
int a=2023;
String s=String.valueOf(a);
int c=s.charAt(0);
int d=s.charAt(1);
if(c==d)return true;
如果是想直接取出数字:
需要转换一下:
int c=s.charAt(0)-‘0’;
int d=s.charAt(1)-‘0’;
转不转换看自己需要!
强烈建议看一下如下文章 👇 :

蓝桥杯上岸必刷!!!(日期专题+保姆级教学)

算法竞赛字符串常用操作总结!!!

结合食用更佳~

数位之和

int sum=0;
while(x!=0){
    int a=x%10;//a存的是取出的每一个数位
    x/=10;
    sum+=a; //sum统计数位之和
}

数字取数位

int a=2023
2:2023/1000
0:2023/100%10
2:2023/10%10
3:2023%10

/:相当于删掉后面的0的总个数的数字
%:相当于保留/取出后面的数字
考试时候,忘记了怎么办?
不要慌,我们还有强大的计算器!!!
个位直接取模,这总是不会忘记的。
最高位直接除即可得
除最高位外,取出某个数,是用%10
中间的需要除多少再我们可以用计算器现推出来。
再%10即可。
以20463为例
先看最高位、个位
个位3:直接对10取模即得
最高位2:
5.png
直接除以10000即得最高位数2

分析规律:直接除以剔除掉最高位数,剩下的数位的10000
如20463得到2:把2剔除掉还剩0463四位,需要除10000(4个0)
再如2578487得到:把2剔除掉还剩578487六位,需要除1000000(6个0)

按照这个规律,可以继续处理剩余的位数。

0
在这里插入图片描述

20463/1000可以得到20再%10便得到0

4
8.png
20463/100可以得到204再%10便得到4

6
88.png
20463/10可以得到2046再%10便得到6

可以再发现规律,/完后会保留我们想要的最后一位数,再%10即可得到答案!

时间取数位

详情见这篇 👇

蓝桥杯上岸必刷!!!(日期专题+保姆级教学)

学习完后,可以写一下这道题👇:

特殊年份

进制转换

真题

【问题描述】
九进制正整数 (2022), 转换成十进制等于多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
以此题为例:
梳理一下进制转换的一些知识点

M进制转10进制

必记公式:

(abcd)M p=M,s:表示的是数字的长度
a*p^s-1+b*p^s-2+c*p^s-3+d*p^s-4

具体应用如下 👇 :

(2022)9转换成10进制
非0的数字表示一个位置:对应的是二进制数中的位置
比如:
千位:2–>3
百位:0(0*任何数均为0,直接跳过)
十位:2–>1
个位:2–>0

又如:4568
千位:4–>3
百位:5–>2
十位:6–>1
个位:8–>0
回到本题:
写成公式:2*9^3+2*9^1+2*9^0=1478
直接用计算机算即可,当然用程序也可以。
分析一下公式:
M进制数转10进制:
首先,得出二进制数中每个数的位置p
再求出当前这一位M的p次方
最后乘上每个数的位数即可。
比如:
数字:(abcd)M
公式:

(abcd)M p=M,s:表示的是数字的长度
a*p^s-1+b*p^s-2+c*p^s-3+d*p^s-4

具体到本题:
(2022)9
2*9^3+2*9^1+2*9^0=1478
答案:1478
在这里插入图片描述


代码算:(数据比较大可以用代码算)

1.png

Accode(9进制换十进制)

import java.util.*;
public class Main{
	public static void main(String []args) {
		Scanner sc=new Scanner(System.in);
		int x=2022;
		int a=1;
		int res=0;
		while(x!=0) {
			res+=(x%10)*a;
			a=a*9;
			x/=10;
		
		}
		System.out.println(res);
	}
}

进而推广到一般情况:

Accode(M进制换十进制)

实际上是把位数取出来,再进行相乘

import java.util.*;
public class Main{
	public static void main(String []args) {
		Scanner sc=new Scanner(System.in);
		int x=题目所给数字;
		int a=1;
		int res=0;
		while(x!=0) {
			res+=(x%10)*a;
			a=a*M;
			x/=10;
		
		}
		System.out.println(res);
	}
}

十进制转M进制

在这里插入图片描述

十进制转B进制可以看y总这张公式
每次**/b可以依次取出a0、a1、...ak-1**

十进制转M进制(API)

返回的是字符串形式
转换为二进制:转换前的数据类型**.toBinaryString(i)**
转换为八进制:转换前的数据类型**.toOctalString(i)**
转换为十六进制:转换前的数据类型**.toHexString(i)**
转换为n进制: Integer.toString(a, n)
示例:

public class Main {
	public static void main(String[] args) {
		int a = 176;
		System.out.println(a + "的二进制是:" + Integer.toBinaryString(a));
		System.out.println(a + "的八进制是:" + Integer.toOctalString(a));
		System.out.println(a + "的十六进制是:" + Integer.toHexString(a));
		System.out.println(a + "的n进制是:" + Integer.toString(a, n));
	}
}

由于时间关系,其他进制不在这一一赘述。
可以看这篇博客,比较详细全面: 👇

进制转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寸 铁

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值