Заменить все числа, представляющие число два в целочисленной степени сочетанием 2^n - C (СИ)

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

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

Текстовый файл содержит целые числа. Заменить все числа, представляющие число два в целочисленной степени сочетанием 2^n (где n – степень). Например: 8 – 2^3, 32 – 2^5. (на С)

Решение задачи: «Заменить все числа, представляющие число два в целочисленной степени сочетанием 2^n»

textual
Листинг программы
#include <stdio.h>
#include <assert.h>
 
int IsPow2(int value) {
    return !(value & (value - 1)) && value;
}
 
int GetExponent2(int value) {
    return (value < 2) ? 0 : 1 + GetExponent2(value >> 1);
}
 
int main(int argc, char* argv[]) {
    const char CFileName[] = "file.txt";
    char tmpName[L_tmpnam];
    FILE* fsrc, * fdst;
    int value;
 
    tmpnam(tmpName);
    assert((fsrc = fopen(CFileName, "r")) != NULL);
    assert((fdst = fopen(tmpName, "w")) != NULL);
 
    while ((fscanf(fsrc, "%d", &value)) == 1) {
        if (IsPow2(value)) {
            fprintf(fdst, "2^%d ", GetExponent2(value));
        }
        else {
            fprintf(fdst, "%d ", value);
        }
    }
 
    fclose(fdst);
    fclose(fsrc);
 
    assert(remove(CFileName) == 0);
    assert(rename(tmpName, CFileName) == 0);
 
    return 0;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Определяются две функции: IsPow2 и GetExponent2
  3. В функции main открывается исходный файл для чтения и создается временный файл для записи
  4. В цикле while считываются числа из исходного файла
  5. Если число является числом два в целочисленной степени, то в цикле рекурсивно вызывается функция GetExponent2 и выводится в файл запись вида 2^n
  6. Если число не является числом два в целочисленной степени, то оно выводится в файл как есть
  7. После окончания цикла закрываются файлы
  8. Удаляется исходный файл
  9. Переименовывается временный файл в исходное имя
  10. Программа возвращает 0, т.е. успешно завершилась

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


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

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

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