Определить количество натуральных чисел, не больше N, в десятичной записи которых нет тройки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Имя входного файла: new_game2.in Имя выходного файла: new_game2.out Ограничение времени: 100 мс Ограничение памяти: 128 M Після гри зі словами Степан вирішив придумати ще й гру з цифрами. До того ж не з усіма - а тільки з трійкою. Задано натуральне число N. Необхідно визначити кількість натуральних чисел, не більших за N, у десятковому запису яких немає трійки. Допоможіть Степану - напишіть програму яка вирішить його проблему. Формат вхідних даних: У вхідному файлі знаходиться одне натуральне число N (1 ≤ N ≤ 1018). Формат вихідних даних: Вихідний файл має містити одне число – відповідь на поставлену задачу.

Решение задачи: «Определить количество натуральных чисел, не больше N, в десятичной записи которых нет тройки»

textual
Листинг программы
#include <stdio.h>
#include <math.h>
 
int hasThree(_int64 num)
{   while(num>0)
    {   if(num % 10 == 3)
            return 1;
        num /= 10;
    }
    return 0;
}
 
_int64 pow9(int p)
{   _int64 res = 1;
    while(p-- > 0)
        res *= 9;
    return res;
}
 
_int64 pow10(int p)
{   _int64 res = 1;
    while(p-- > 0)
        res *= 10;
    return res;
}
 
int main() 
{   unsigned _int64 N, i, count;
    int len;
    
    scanf("%I64u", &N);
    len = (int) log10(N*1.);
 
    for(i = pow10(len), count = pow9(len) - 1; i<=N; i++)
        if(!hasThree(i))
            count++;
 
    printf("%I64u",count);
    
    getchar();getchar();
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы