Remove 9

题目:
Start from integer 1, remove any integer that contains 9 such as 9, 19, 29…
So now, you will have a new integer sequence: 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, …
Given a positive integer n, you need to return the n-th integer after removing. Note that 1 will be the first integer.
Example 1:
Input: 9
Output: 10
咋看这道题目,有点没思路,要遍历数字再删除是不可能的。再一思索,诶,这就是9进制的题呀,然后一个数咋转为9进制呢,我的想法是这样的。

public int decimalToNovenary(int n) {
        int answer = 0;
        int base = 1;
        while (n > 0) {
            answer += n % 9 * base;
            n /= 9;
            base = (base<<3) +(base<<1);
        }
        return answer;
    }

代码解释:
answer += n%9*base;
(n%9)为得到该位的值,再乘以该位对应的基数,则得到该位实际的值,比如:
对于十进制,十位为2,20则为该位实际的值,2为该位的值,十为该位对应的基数。再加上answer,就是加上个位的值,得到的就是最后答案了。
n /= 9;//n记录这个数的位数和该位的值
base = (base<<3) +(base<<1);//*10,每进一位,该位对应的基数
以此类推,以后求其他进制也很好求啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值