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; }