第十四届蓝桥杯集训——if——配套用法示例
创始人
2024-04-24 22:33:44

第十四届蓝桥杯集训——if——配套用法示例


目录

第十四届蓝桥杯集训——if——配套用法示例

方法1

方法2 

其它指数幂


 

输入一个数n,判断n是否是2的指数。

n的取值范围(0=>n<=2^{31})​​​​

题目看着很简单,其实在比较小的数上还是挺容易做的,但是依然要使用循环进行处理。

把这个数多次除以2,
如果可以整除,
是2的指数倍,
如果不可以,就不是,

但是循环我们还没有学习呢,不能用循环处理,而且利用这种方式根本无法判断要循环多少次,根据取值范围可以直接套31次循环。每次都循环这么多次,复杂度这就不低了。所以我们尽量用一次判断来解决它。

但是今天我们不使用循环,我们就使用一个【&】符号来判断这个n是否是2的指数。

推理:

有一个数2,这个数是否是2的指数。

2进行二进制处理,得出:【10】,如果【10】&【01】正好等于【00】,我们知道,如果是2的指数那么一定会是100000……的方式。故而我们有,如果二进制的这个数-1与n这个数进行&的位运算结果一定是00000,……,所有我们就可以用一个表达式来计算这个n是否是2的指数了。

方法1

接下来我们上代码:

举例数字1:2二进制:10,有: 10&(10-1)=10&01=00

举例数字2:8二进制:1000,有1000&(1000-1)=1000&0111=0000

后面的数字都是一个逻辑,计算完成后都是0000。

package com.item.action;import java.util.Scanner;public class Main {public static void main(String args[]) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.close();/*** 举例数字1:2二进制:10,有: 10&(10-1)=10&01=00* 举例数字2:8二进制:1000,有1000&(1000-1)=1000&0111=0000* 后面的数字都是一个逻辑,计算完成后都是0000。*/if ((n & (n - 1)) == 0) {System.out.println(true);} else {System.out.println(false);}}
}

输入测试1024,输出结果true。

方法2 

我们利用2的31次幂来直接计算,这种方法的复杂度也是O(1)

package com.item.action;import java.util.Scanner;public class Main {public static void main(String args[]) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.close();/*** 方法2:利用范围2的31次幂=2,147,483,648,* 注:由于int正值是从0开始计算故而无法正常显示2147483648* 我们需要使用l来表示一下这个数才能正常计算*/if(2147483648l%n==0) {System.out.println(true);}else {System.out.println(false);}}
}

输入测试1024,输出结果true。 

其实我们学会第二种方法后,无论是int范围还是long范围的所有数我们就都会判断了。

其它指数幂

例如:判断一个数是否是7的指数。

先计算7在int范围内的最大指数值,在进行对这个数n的取模计算即可。

package com.item.action;import java.util.Scanner;public class Main {public static void main(String args[]) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.close();/*** 判断一个数是否是7的指数,n取值范围int值内* 7的11次幂就是int值内的最大数。1977326743*/if(1977326743%n==0) {System.out.println(true);}else {System.out.println(false);}}
}

输入测试49,输出结果true 

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...