hdu4278 小想法

题意:
      有几个计数器,从1开始计数,计数器有问题,没有3,8这两个数字,只要出现3或者8,那么直接跳过,如 12579 下一个数字就是 12590 ,给你一个数字,问他实际计数了多少。


思路:
     直接把输入数字的每一位处理一下,对于当前这位,如果它 >= 3 && <= 8 那么-1 ,

如果它 >8 那么-2,这样就把他变成另一个数,此时的这个数是八进制数,在把他转换成十进制数就行了。。如 59 先 把它变成 47,然后转换成十进制是 7 + 4 * 8 = 39,就ok了。


#include<stdio.h>
#include<string.h>
#include<math.h>

int main ()
{
   char str[100];
   while(~scanf("%s" ,str) && str[0] != '0')
   {
      int l = strlen(str) - 1;
      int tt = 0;
      int ans = 0;
      for(int i = l ;i >= 0 ;i --)
      {
         int now = str[i] - 48;
         if(now >3 && now < 8)now --;
         if(now >8) now -= 2;
         ans +=now * (int)pow(8 ,tt);
         tt ++;
      }
      printf("%s: %d
", str,ans);
   }
   return 0;
}

原文地址:https://www.cnblogs.com/csnd/p/12063251.html