编程——错误的里程表

题目

某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从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);

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值