Дан массив цифр десятичного числа. Необходимо вычесть/прибавить к числу единицу. Как задать такую функцию в C? - C (СИ)

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

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

#include <stdio.h>
 
void shift(int *a, int n);
 
int main() {
    FILE* in = fopen("input.txt", "r");
    if (in == NULL) {
        perror("Cannot open input file");
        return -1;
    }
    int x;
    int n = 0;
    while (fscanf(in, "%d", &x) == 1) {
        ++n;
    }
    fseek(in, 0, SEEK_SET);
 
    if (n == 0) {
        fprintf(stderr, "Empty input file.\n");
        return -1;
    }
 
    int *a = new int[n];
 
    int m = 0;
    for (int i = 0; i < n; ++i) {
        if (fscanf(in, "%d", &(a[i])) == 1) {
            ++m;
        }
    }
    fclose(in);
 
    shift(a, m);
 
    FILE* out = fopen("output.txt", "w");
    if (in == NULL) {
        perror("Cannot open output file");
        return -1;
    }
 
    for (int i = 0; i < m; ++i) {
        if (i > 0) {
            if (i % 10 == 0)
                fprintf(out, "\n");
            else
                fprintf(out, " ");
        }
        fprintf(out, "%d", a[i]);
    }
    fprintf(out, "\n");
 
    fclose(out);
    return 0;
}
Я написала всё, кроме тела этой самой функции shift

Решение задачи: «Дан массив цифр десятичного числа. Необходимо вычесть/прибавить к числу единицу. Как задать такую функцию в C?»

textual
Листинг программы
// просмотр файла (как у тебя до строчки 22)
int *a = new int[n+1];
a[0] = 0;
fseek(in, 0, SEEK_SET);
for (int i = 0; i < n; ++i) {
        fscanf(in, "%d", a+i+1);
}
int vume = 0;  // Перенос разряда "в уме"
for(i=n; i>=0; i--) {
  int c = a[i]+vume;
  a[i] = c%10;
  vume = c/10;
}
// вывод как у тебя

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

В данном коде реализована функция чтения десятичного числа из файла и его последующего преобразования в массив цифр.

  1. Сначала создается динамический массив для хранения цифр числа.
  2. Затем, начиная с нулевого элемента, в массив последовательно считываются цифры числа.
  3. После чтения всех цифр, происходит их обработка в обратном порядке с целью формирования числа.
  4. При обработке каждой цифры, она добавляется к текущему значению переменной vume, которая инициализируется нулем.
  5. Полученное значение затем делится на 10, обеспечивая таким образом перенос разряда в следующий разряд числа.
  6. После обработки всех цифр, число выводится на экран.

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


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

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

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