险过代码:
#include <cstdio>
#define MAX 1000000 + 2
int a[MAX] = {0, 1, 2};
bool Judge(int n){
while(n){
if(n % 10) {
n /= 10;
continue;
}
return false;
}
return true;
}
int main(){
int n, i;
for(i = 3; i != MAX; ++i)
if(Judge(i)) a[i] = a[i - 1] + 1;
else a[i] = a[i - 1];
while(scanf("%d", &n) == 1)
if(!Judge(n) || n == 0) printf("Unlucky\n");
else printf("%d\n", a[n]);
return 0;
}
由于这题有点类似九进制的意思,所以可以优化成这样:
#include <cstdio>
bool Judge(int n){
while(n){
if(n % 10) {
n /= 10;
continue;
}
return false;
}
return true;
}
int Combine(int n){
int s = 0, t = 1;
while(n){
s += n % 10 * t;
t *= 9;
n /= 10;
}
return s;
}
int main(){
int n, i;
while(scanf("%d", &n) == 1){
if(!Judge(n) || !n) printf("Unlucky\n");
else printf("%d\n", Combine(n));
}
return 0;
}