第十四届蓝桥杯集训——if——配套用法示例
用法 示例 蓝桥 if 集训 第十四届 配套
2023-09-14 09:04:57 时间
第十四届蓝桥杯集训——if——配套用法示例
目录
输入一个数n,判断n是否是2的指数。
n的取值范围(0=>n<=)
题目看着很简单,其实在比较小的数上还是挺容易做的,但是依然要使用循环进行处理。
把这个数多次除以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
相关文章
- JS定时器的用法及示例
- Optional 的基本用法
- PHP异常处理函数set_exception_handler()的用法
- Elasticsearch——Rest API中的常用用法
- ios CGRec用法
- python中数组与多维数组用法介绍
- Python排序算法之选择排序定义与用法示例
- Python排序算法之选择排序定义与用法示例
- GO的MAP字典简单用法示例
- python中的随机函数random的用法示例
- Python网络编程之TCP套接字简单用法示例
- Python排序算法之选择排序定义与用法示例
- typescript ts参数展开运算符:形参展开和实参展开及as const的用法示例
- Scala Array中_ filter map的用法示例
- java junit Assert断言用法示例: Assert.assertEquals(期望的结果,运算的结果)
- SQL语句Left join 中On和Where的用法区别
- Angular路由里的canActivate用法
- 第十四届蓝桥杯集训——switch——配套用法示例
- 【Java 8 新特性】Java Stream.of()用法示例
- Python 交集、并集、差集用法示例
- Pytorch nn.BCEWithLogitsLoss() 的简单理解与用法
- I2c驱动i2c_master_send()和i2c_master_recv()用法
- C++ map()和pair()用法(四)
- pytorch中logsumexp函数的用法