Remove 9

来源:互联网 发布:查分数的软件 编辑:程序博客网 时间:2024/04/28 00:28

题目:
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,每进一位,该位对应的基数
以此类推,以后求其他进制也很好求啦。

原创粉丝点击