HDU 4278

来源:互联网 发布:程序员能做到多少岁 编辑:程序博客网 时间:2024/06/05 11:01
2012 ACM/ICPC Asia Regional Tianjin Online

Faulty Odometer

题目给出码表读数,要求输出实际走的公里数。
(码表遇见3或8就会向后跳,3→4,8→9,每位数字都会这样。)

思路:
按照从低位向高位的顺序,依次计算跳表数。

代码:

#include
#include
intmain()
{
   _int64 num,temp,count;
   int a[10],i,j,n;
   while(scanf("%I64d",&num),num!=0)
   {
      temp=num;count=0;
      for(i=0;temp!=0;temp/=10,i++)
         a[i]=temp%10;
      i--;
      for(n=0;n<=i;n++)
      {
         for(j=i;j>=n;j--)
         {
             if(j-1-n>=0)                     //最低位至最高位的前一位
             {
                if(a[j]==9)
                   count+=7*pow(8.0,j-1-n)*(2*pow(10.0,n));
                elseif(a[j]>=4)count+=(a[j]-1)*pow(8.0,j-1-n)*(2*pow(10.0,n));
                elsecount+=a[j]*pow(8.0,j-1-n)*(2*pow(10.0,n));
             }
             else                            //最高位
             {
                if(a[j]==9)count+=2*pow(10.0,n);
                elseif(a[j]>=4)count+=pow(10.0,n);
             }
         }
      }
      printf("%I64d: %I64d\n",num,num-count);
   }
   return0;
}