//暴力
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 100005;
int num[maxn]={0};
int main()
{
int n, i, t, sum = 0, count;
for( i=0; i<=100000; i++ ){
t = i;
while( t ){
if( t%10==3 || t%10==8 ){
sum++;
break;
}
t /= 10;
}
num[i] = sum;
}
while( ~scanf("%d", &n) && n ){
if( n<=100000 )
printf("%d: %d\n", n, n-num[n]);
else{
sum = n/100000;
count = num[sum]*100000 + (sum-num[sum])*num[100000] + num[n%100000];
printf("%d: %d\n", n, n-count);
}
}
return 0;
}
//8进制转换成10进制
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
int num[20];
int main()
{
int n, t, i, m, p, x;
while( ~scanf("%d", &n), n ){
memset(num, 0, sizeof(num));
t = n, m = 0, x = 0;
for( i=0; ; i++ ){
if( t<=0 )
break;
p = t%10;
if( p>=8 )
num[x++] = p-2;
else if( p>=3 && p<8 )
num[x++] = p-1;
else num[x++] = p;
t /= 10;
}
for( i=0; i<x; i++ )
//printf("%d ", num[i]);
m += num[i]*pow(8, i);
printf("%d: %d\n", n, m);
}
return 0;
}
数位DP解法,正在研究...未完待续