“妙用空循环、字符型变量中提取整型” 两种编程技巧

(一) 空循环的妙用

在之前学习C的时候,导师是一位资深算法工程师,其对代码的精细要求使我获益匪浅。

比如:

	int i = 0;
    for(i = min; i >=1; i--){
    	if(min % i == 0 && max % i == 0){
    		printf("最大公约数:%d\n",i);
    		break;

这是一段求最大公约数的代码,可以看到,正常情况下的思路应该是架循环内置判断跳出循环

大可欣赏一下空循环的做法:

    int i = 0;
    for (i = min; i >= 1 && (min % i != 0 || max % i != 0) ; i--) ;
        printf("最大公约数:%d\n",i);

我们可以来梳理一下思路:

传统做法:
I. 从较小数开始循环判断,是否为当前两数的公约数(此时较小数便为最大公约数);
II. 若不符合,i 自减,直到1,循环结束(则二者最大公约数为1)。

空循环做法:
I. 岗哨 i 满足进入循环的要求的基础上,若两数对 i 取余不能整除,则继续循环,
II. 若能整除,则空循环结束,此时 i 所指向的数便为最大公约数

import java.util.Scanner;

//求两个数的最小公倍数和最大公约数
public class Demo {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        System.out.println("请输入较大值:");
        int max = in.nextInt();

        System.out.println("请输入较小值:");
        int min = in.nextInt();

        int i = 0;
        for (i = min; i >= 1 && ((min % i != 0) || (max % i != 0)) ; i--) ;
        System.out.println("最大公约数:" + i);

        for (i = max;(i % min != 0) || (i % max != 0); i++);
        System.out.println("最小公倍数:" + i);

    }
}

放到Java中亦是如此。

相比于传统方法倾向于人解决问题的思路,架空循环便是追求编程的高度。

节省一层判断,使代码更高效简便。

(二) 字符类型提取整型

public class Demo {
    public static void main(String[] args) {
        char a = '6';
        char b = '7';
        System.out.println(a + b);
    }
}

此时运行我们会得到的是:

在这里插入图片描述
毋庸置疑,字符6和字符7在运算时会在底层自动转换成其对应的ascii码值,且自动提升成整型来进行运算。

我们进行一次强转:

System.out.println((char) (a + b));

便会得到其对应ascii码的字符。

在这里插入图片描述
那该如何提取出整形呢?

我们不妨想想:

‘6’对应的ascii码值为54,那么让其减去ascii码值为48的‘0’,不就可以得到整型6了么。

public class Demo {
    public static void main(String[] args) {
        char a = '6';
        char b = '7';
        System.out.println(a - '0' + b - '0');
    }
}

在这里插入图片描述
显然是可以的,若是需要用到这个数,只需将它赋给一个整型变量即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值