Skip to content

Instantly share code, notes, and snippets.

@kupp1
Created July 29, 2019 10:00
Show Gist options
  • Save kupp1/0dce2211666608a2a9b8844f9cb3c3db to your computer and use it in GitHub Desktop.
Save kupp1/0dce2211666608a2a9b8844f9cb3c3db to your computer and use it in GitHub Desktop.
Capacity & multiplicity
#include <stdio.h>
#include <inttypes.h>
int main(int argc, char *argv[])
{
uint_fast16_t N, count = 0;
scanf("%" SCNuFAST16, &N);
uint_fast16_t cur_cap = 1, following = 10;
/* cur_cap - текущая разрядность числа
following - первое число большей разрядности */
uint_fast16_t cur_last_evenly_divided = 1;
/* cur_last_evenly_divided - последнее число текущей разрядности,
которое делится нацело на свою разрядность */
while (count < N)
{
if (cur_last_evenly_divided < following)
/* предполагается, что cur_last_evenly_divided делится на свою разрядность,
по-этому выводим его, и прибавляем разрядность, и так пока оно за свой
разряд не выйдет */
{
printf("%" SCNuFAST16 "\n", cur_last_evenly_divided);
cur_last_evenly_divided += cur_cap;
count++;
}
else // если мы перешли на следующую разрядность
{
cur_cap++; // увеличиваем текущюю разрядность
uint_fast16_t rem = following % cur_cap;
/* Так как мы не изменяли following, то на данный момент
following - этому первое число текущей разрядности.
Находим остаток от деления following на свою разрядность*/
cur_last_evenly_divided = following - rem + (rem > 0 ? cur_cap : 0);
/* Если первое число делится, то присваеваем это значение
cur_last_evenly_divided, если нет, то находим первое число текущей
разрядности, которое бы делилось*/
following *= 10;
}
}
return 0;
}
Задание "Ряд и кратность"
Написать программный код, который перебирает целые числа от 0 до бесконечности и выводит на экран те, которые делятся без остатка на количество разрядов (знаков) этого числа (т.е. те двухзначные, которые делятся на 2, трехзначные на три и т.д.). Выполнение обработки должно остановиться в тот момент, когда всего будет выведено N (задается пользователем) таких чисел.
Результат нужно предоставить в виде:
1) исходный код
2) результат выполнения кода для N = 28, 120, 500
Задание должно быть выполнено на c++ и наиболее просто, оптимально
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment