✨作者:@小孙的代码分享😄
✨专栏:《Java SE》😄
✨送给各位的一句话:空杯心态 才能学到新知😄
✨希望大家看完这些题目有所收获,别忘了,点赞+评论!😄
1.判断一个数字是否是素数(三个方法)🔥
方法一 :
用除了1和它本身外的数字除以它,能被整除的就不是素数。
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int a=scan.nextInt();
int i=2;
for (;i
方法二:
优化算法——(i<=a/2)
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int a=scan.nextInt();
int i=2;
for (;i<=a/2;i++) {
if(a%i==0){
System.out.println("不是素数!");
break;
}
}
if (i>a/2){
System.out.println("是素数!");
}
}
方法三:
提升算法效率——sqrt()
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int a=scan.nextInt();
int i=2;
for (;i<=Math.sqrt(a);i++) {
if(a%i==0){
System.out.println("不是素数!");
break;
}
}
if (i>Math.sqrt(a)){
System.out.println("是素数!");
}
}
2.求最大公倍数和最小公倍数🔥
tips:计算最大公约数是用辗转相除法,最小公倍数是通过两数乘积除以最大公约数。
直接给大家上代码:
public class Test {
public static void main(String[] args) {
//辗转相除法
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = a%b;
int b1 = b;
while (c != 0) {
a = b1;
b1 = c;
c = a%b1;
}
System.out.println(b1+" 是最大公约数!");
//知道最大公约数,算最小公倍数
//可以将两数相乘再除以最大公约数
System.out.println(a*b/b1+"最小公倍数! ");
}
}
3.求出0~999之间的所有“水仙花数”并输出🔥
先带大家了解了解水仙花数;
然后就直接上代码:
public class Test {
public static void main(String[] args) {
for (int i = 1; i < 999999; i++) {
int count=0;//位数
int tmp = i;
while(tmp != 0){
count++;
tmp /= 10;
}
//tmp ==0; count==计算出的位数;
tmp = i;
int sum = 0;
while(tmp != 0){
sum += Math.pow(tmp%10,count);
tmp /= 10;
}
//此时tmp中存放的就是每一位的count次方和
if(sum == i){
System.out.println(i);
}
}
}
}
4.写出一个函数返回参数二进制中1的个数(三个方法)🔥
方法一:
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
for(int i=0;i<32;i++){
if( ( (n>>i) &1) != 0 ){
count++;
}
}
System.out.println(count);
}
}
但是这种方法不高效,需要移动32次,那么可不可以优化一下,使算法效率提高
方法二:
public class Test{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
while(n != 0){
if( (n & 1) != 0){
count++;
}
n=n>>>1;
}
System.out.println(count);
}
}
大家可以发现我们这里使用了一个>>>(无符号右移),就可以输入负数了
方法三:
public static void main(String[] args) {
Scanner scanner= new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
while(n != 0){
n = n&(n-1);
count++;
}
System.out.println(count);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)