有几个计数器,从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; }