有歧义的号码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void * x, const void * y) {
    //x < y
    return (*((int *)(x))) > (*((int *)(y))) ? 1 : -1;
}
int a[10], b[10];
const int r[10] = { 0, 1, 2, -1, -1, 5, 9, -1, 8, 6 };
int main(){
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif
    int n, d, x, y;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++){
        x = i, d = 0;
        if (x % 10 == 0) continue;
        bool flag = true;
        while (x){
            a[d++] = x % 10;
            x /= 10;
        }
        for (int j = 0; j < d; j++){
            b[j] = r[a[d - j - 1]];
            if (b[j] == -1) flag = false;
        }
        y = 0;
        for (int j = d - 1; j >= 0; j--){
            y = y * 10 + b[j];
        }
        if (y>n || y == i) flag = false;
        if (flag) printf("%d\n", i);
    }
    return 0;
}
View Code

相关文章: