题目:
• 题意:
有个损坏的里程表,不能显示数字4,会从数字3直接跳到数字5
给出里程表的读数,求出实际里程。
限制: 里程表读数
• 分析:
在这个坏掉的里程表上,相当于只能显示“012356789”,这其实不难发现是一种修改过的9进制数
于是我们只需要将里程表读数转换成真正的9进制数之后,再将它转换成10进制数就可以了
代码:
// Problem#: 1240
// Submission#: 5124800
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int getAnswer(int num)
{
int ans=0;
for(int i=1;num;num/=10,i*=9)
{
int r=num%10;
if(r>4) r--;
ans+=r*i;
}
return ans;
}
int main()
{
int a;
while(scanf("%d",&a)&&a)
printf("%d: %d\n",a,getAnswer(a));
}