【错误里程表】8进制转10进制

 

题目

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

输入:

6   //这个表示输入行数
0
1
12
159
111224459
124567976
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

输出:

0
1
10
103
19212007
21913077
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

解题:

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

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

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

显示的里程数其实是8进制。逢8进1

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

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
import java.lang.Math.*;
public class Main {

    public static int getAns(int num){
        int ans=0,j=0;
        while(num>0){
            int x=num%10;
            if(x>4) x--;
            ans+=x*Math.pow(9,j);//9进制转换为10进制
            j++;
            num/=10;
        }
        return ans;
    }
    public static void main(String[] args) throws FileNotFoundException {

        Scanner in = new Scanner(System.in);

        int x=in.nextInt();
        System.out.println(getAns(x));

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值