一、最大公约数
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()方法的运用,还有异或的符号“ ^ ”、原理和运用