编程——错误的里程表

题目

某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从2变到4,而跳过数字3;从7变到9,而跳过数字8,里程表所有位(个位、 十位、百位等)上的数字都是如此。例如,如果里程表显示29,汽车走过1公里之后,该里程表显示40,但实际应该是30。

输入:
6   //这个表示输入行数
0
1
12
159
111224459
124567976
输出:
0
1
10
103
19212007
21913077

解题:

在数数的时候,我们正常从1数到10,之后11,这样是十进制。现在这个里程表,有两个数不显示,其实相当于当我们数到10的时候,其实只有1,2,4,5,6,7,9,10这8个数字,在这种情况下其实是8进制

所以,我们现在把显示的里程数,转成8进制即可,但要注意的是,我们数数的时候是直接丢掉了两个数,所以要判断当前某位上的数实际是多大。

比如假设显示 5,那么3 < 5 < 8的,所以实际只有4个数(5-1)
比如假设显示 9,那么9>3 ,9>8的,所以实际只有7个数(9-2)

function getOriginNum(x){
    //没有3和8
    var s = x;
    if(x>3) s--; //少一个数,就少数一个
    if(x>8) s--; //比如数到9,其实只有7个数
    return s;
}

转换进制

function getDecimalFromN(num,base){
    var s= 0,k=0;
    while(num>0){
        var a = num%10;
        a = getOriginNum(a);
        //进制转换计算公式
        s += a*base**k;
        k++;
        num = parseInt(num/10);

    }
    console.log(s);
    return s;
}

getDecimalFromN(0,8);
getDecimalFromN(1,8);
getDecimalFromN(12,8);
getDecimalFromN(159,8);
getDecimalFromN(111224459,8);
getDecimalFromN(124567976,8);

猜你喜欢

转载自blog.csdn.net/HYeeee/article/details/89354073