Неудачные числа

Неснесенные числа (не домашнее задание)

Есть несколько чисел, которые считаются безмногими (он содержит только 4 и 7.). Наша цель состоит в том, чтобы найти количество таких чисел в диапазоне положительных целых чисел А и б.
Например:
Вход: A = 10 B = 20
Выход: 0
Вход: A = 30 B = 50
Выход: 2 (44, 47)

Ниже приведен код, который я попробовал с использованием подхода статического массива, в котором я рассчитываю все возможные несчастливые числа для 32-разрядного целого числа. Это делается в O (n), а затем последовательное сканирование помогает получить счет, который снова является операцией O (N). Есть ли лучший подход для решения этого без помощи статического массива?

#define MAX_UNLUCKY 1022
static int unlucky[MAX_UNLUCKY];  
int main(int argc, char **argv) { 
    int i, j, k;  
    int a, b, factor;  
    printf("Enter the numbers : \n");  
    scanf("%d",&a);  
    scanf("%d",&b);  
    unlucky[0] = 4;  
    unlucky[1] = 7;  
    factor = 10;  
    k = 1;  
    for(i = 2; i < MAX_UNLUCKY; ++i) 
        unlucky[i] = unlucky[(i >> 1) - 1]*factor + unlucky[k ^= 1];  
    for (i = 0; i < MAX_UNLUCKY;++i) 
        if (unlucky[i] > a) break;  
    for (k = i; k < MAX_UNLUCKY;++k) { 
        if (unlucky[k] > b) break;
        printf("Unlukcy numbers = %d\n", unlucky[k]);  
    }  
    printf ("Total Number of Unlucky numbers in this range is %d\n", k-i);  
    return (0);
}  
6
задан Anoop Menon 18 September 2011 в 13:11
поделиться