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

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

距离蓝桥杯省赛倒数最后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:
蓝桥杯上岸必刷!!! (进制、数位专题)_第1张图片
直接除以10000即得最高位数2

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

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

0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EnUDy09-1691246451821)(https://cdn.acwing.com/media/article/image/2023/04/06/261358_bdc7fdb2d4-数位0.png)]
20463/1000可以得到20再%10便得到0

4
蓝桥杯上岸必刷!!! (进制、数位专题)_第2张图片
20463/100可以得到204再%10便得到4

6
蓝桥杯上岸必刷!!! (进制、数位专题)_第3张图片
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
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QTZwpiBe-1691246451822)(https://cdn.acwing.com/media/article/image/2023/04/06/261358_978b47ecd4-进制.png)]


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

蓝桥杯上岸必刷!!! (进制、数位专题)_第4张图片

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进制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I3ahZIGv-1691246451822)(https://cdn.acwing.com/media/article/image/2023/04/07/261358_6fc36dbfd4-十进制.png)]
十进制转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));
	}
}

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

进制转换

你可能感兴趣的:(蓝桥杯上岸,蓝桥杯,进制,数位,刷题,java,eclipse,算法)