题目链接:http://acm.tju.edu.cn/toj/showp.php?pid=1987
题目大意:各位上的数都是从3跳到5,越过了4,输出这样的数的真实值
思路:跳了一位,缺数处理+9进制 拆解的时候用10, 还原重组的时候用9
代码:
//缺数处理 9进制
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
int i,m,n,a[9],mul;
while(cin>>n && n)
{
if(n==0)
break;
m = n;
memset(a,0,sizeof(a));
for(i=0;n;i++,n/=10) //余10拆解 遇大于4减1
{
a[i]= n%10; //i越大的,是位数越高的,所以后面转九进制重组时,是从高位算起
if(a[i]>4)
a[i]--;
}
mul = a[--i];//最后一个i无用的
for(;i>=1;i--) //重组 9进制 所以*9
{
mul = mul*9+a[i-1];
}
cout<<m<<": "<<mul<<endl;
}
return 0;
}