NYOJ532 不吉利的数字
险过代码:
#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; }