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