Неснесенные числа (не домашнее задание)
Есть несколько чисел, которые считаются безмногими (он содержит только 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);
}