HDU4278

HDU4278 Faulty Odometer

你有一个错误的里程表,里程表只会显示整数的里程数,但是这个表有个问题,它从2到4计数和从7到9计数时,会跳过数字3和8,即你从它看到的里程数中永远也看不到数字3和8.例如:当前里程显示15229时,当车再走一公里,则显示新的里程数为15240(而不是15230)

输入:每行代表一个输入实例,为一个从1到999999999的正整数,且无首部0.最后一行输入0表示输入结束。

输出:对于每个实例,输入为给出的里程+冒号+实际走的里程数。

分析:其实给出的数就是一个8进制的数,每一位(个位,十位,百位,等)都只有8个数是有效地,分别是0,1,2,4,5,6,7,9,它们对应代表0,1,2,3,4,5,6,7.所以任意给一个里程数比如250,它对应的8进制数为240(5->4),则8进制数240表示十进制数4*8+2*64=32+128=160.

AC代码:

#include<iostream>
#include<cstdio>
usingnamespace std;
 
inttable[]={0,1,2,-1,3,4,5,6,-1,7};//原数字各位上的0-9数字分别对应8进制数的那几位
intmain()
{
    int n;//原数字
    while( scanf("%d",&n)==1&& n )
    {
        printf("%d:",n);
        int s=0,jie=1;//s是实际里程,jie是1,8,64等计算8进制数每一位的权
        while(n)
        {
            s=s+jie*table[n%10];//原里程的对应每一位转化位8进制数再转化为10进制值
            jie*=8;
            n/=10;
        }
        printf(" %d\n",s);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值