Linux printf & Class.this & git rebase & Persistent Bugger

本文介绍如何使用Linux的printf命令进行不同进制之间的转换,包括十进制、十六进制和八进制。此外,还探讨了Java中this和Class.this的区别,以及一个高效的递归和非递归解决方案实现数字的持久性计算。

Tips

  1. 使用 printf 命令方便地在 Linux 中进行进制转换(查找 Java 线程16进制线程 id 时经常会用到)。
    printf "%x\n" 222 打印222的16进制。
    printf "%d\n" 0x3ac 打印3ac的10进制。
    另外 %o 为八进制。
  2. Java 中 thisClass.this 的区别:
    当内部类或者匿名内部类要使用外部类的实例时使用 Class.this
class Outter {
    String name;

    class Inner {
        String name;
        String getPersonName() {
            // to fetch the Outter's name field
            return Person.this.name; 
        }
    }
}
  1. git rebase 命令,相信很多人用得还是比较少的,那么它跟 git merge 有哪些区别呢?这个可能一言难尽,网上也有很多资料可以看,所以这里只列举一个 git rebase 的常用方式。
    git rebase -i upstream|branch 合并多次提交,通过交互式编辑来完成后续操作,通常在当前分支上使用或者将分支 rebase 至其他分支上使用。

Code

Persistent Bugger from CodeWars 6kyu.
一个写得比较好的递归 solution :

    public static int persistenceWithRecursion(long n) {
        long m = 1, r = n;
        if (r / 10 == 0)
            return 0;
        for (r = n; r != 0; r /= 10)
            m *= r % 10;
        return persistence(m) + 1;
    }

非递归:

public static int persistenceWithoutRecursion(long n) {
        int times = 0;
        while (n >= 10) {
            n = Long.toString(n).chars().reduce(1, (r, i) -> r * (i - '0'));
            times++;
        }
        return times;
    }

反正都比我自己写的简洁多了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值