关于Java相关算法的学习(最大公约数,最小公倍数,反转整数,异或,进位统计)

一、最大公约数

1、要点:

用代码实现两个正整数的最大公约数,可以先利用数学思想利用欧几里得求最大公约数的方法,将问题具象化,如下图欧几里得求最大公约数原理

2、代码实现

import java.util.Scanner;

public class 欧几里得最大公约数 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()) {
            //输入两个数,并判断输入数值的大小
            int a = sc.nextInt();
            int b = sc.nextInt();
            int c= Math.max(a,b);
            int d= Math.min(a,b);
            System.out.println(gcd(c, d));
            System.out.println(gcd2(c,d));
        }
    }
    public static int gcd(int a, int b) {    //常规法构造函数,运用循环求最大公约数
        while (b>0){                  //欧几里得求最大公约数
            int t=a%b;
            a=b;
            b=t;
        }
        return  a;
    }
    public static int gcd2(int a,int b){     //构造递归函数,同样也是运用欧几里得求最大公约数的原理求出最大公约数
        return b==0?a:gcd2(b,a%b);
    }
}

以上运用了两种方式都以欧几里得算法为基础,分别使用了while循环与递归函数求最大公约数

二、最小公倍数

1、要点:

我们可以以上述求得的最大公约数,以下原理求最小公倍数:

两个正整数A、B,他们的最大公约数和最小公倍数的乘积就等于这两个数的乘积(A*B)。例如:A=12=2*2*3;B=15=3*5那么,他们的最大公约数是:3于是,他们的最小公倍数是:(12*15)/3=60

简单来说:输入两个数的乘积除以它们的最大公约数就是它们的最小公倍数

2、代码实现

import java.util.Scanner;

public class 最小公倍数 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()) {
            //输入两个数,并判断输入数值的大小
            int a = sc.nextInt();
            int b = sc.nextInt();
            int c= Math.max(a,b);
            int d= Math.min(a,b);
            System.out.println(a*b/gcd(c, d));    //两个不为0的数的乘积等于这两个数的最小公倍数乘以最大公约数
        }
    }
    public static int gcd(int a, int b) {    //常规法构造函数,运用循环求最大公约数
        while (b>0){                  //欧几里得求最大公约数
            int t=a%b;
            a=b;
            b=t;
        }
        return  a;
    }
}

三、反转整数

1、要点:

方法一:

将一个整数n反转,可以一个一个打印n%10(将整数从后往前依次打印)

方法二:

可以先将整型n转化为字符串的形式,再利用字符串的相关方法(.reverse()),将字符串反转即可达到效果

import java.util.Scanner;
public class 反转整数 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()){
            int n=sc.nextInt();
            //方法一
//            System.out.print(n%10);
//            n=n/10;
            //方法二
            System.out.println(new StringBuffer(String.valueOf(n)).reverse()); //将整型n转为字符串,再用reverse方法将字符串反转
        }
    }
}

四、异或" ^ " 

1、要点:

先了解异或的相关原理:

" ^ ":两个数值异或,相同为0,不同为1(该符号^会将数值转换为二进制展开进行异或后输出10进制)

2、相关代码案例<数值交换>

import java.util.Scanner;

public class 异或 {
    // ^ 两个数值异或,相同为0,不同为1(该符号会将数值转换为二进制展开进行异或后输出10进制)
    //如 3^3=0 1^0=1
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        //异或解决数值交换问题
        while (sc.hasNext()){
            int a=sc.nextInt();
            int b=sc.nextInt();
            a=a^b;
            b=a^b;
            a=a^b;
            System.out.println("a="+a+",b="+b);
        }

    }
}

五、进位统计

1、要点:

输入两个整数并相加,判断相加过程中有多少次进位

首先可以设立变量a、b、c,其中a和b为输入两个整数,c为进位值

然后利用for循环至相加每一位上和if判断和统计每一位相加的进位的数值和次数

2、代码实现:

import java.util.Scanner;

public class 进位统计 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int count=0;
        int c=0;
        while (sc.hasNext()) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            for (int i = 0; i <= 9; i++) {
                if (a % 10 + b % 10 + c >= 10) {
                    c = (a % 10 + b % 10 + c) / 10;
                    a = a / 10;
                    b = b / 10;
                    count++;
                }

            System.out.println(count);
        }

    }

六、个人收获

今天的5个算法学会了欧几里得求最大公约数和最小公倍数,在反转整数中也学会了整型与字符串型的相互转换.reserve()方法的运用,还有异或的符号“ ^ ”、原理和运用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值