Дан массив цифр десятичного числа. Необходимо вычесть/прибавить к числу единицу. Как задать такую функцию в 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;
}Решение задачи: «Дан массив цифр десятичного числа. Необходимо вычесть/прибавить к числу единицу. Как задать такую функцию в 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;
}
// вывод как у тебя
Объяснение кода листинга программы
В данном коде реализована функция чтения десятичного числа из файла и его последующего преобразования в массив цифр.
- Сначала создается динамический массив для хранения цифр числа.
- Затем, начиная с нулевого элемента, в массив последовательно считываются цифры числа.
- После чтения всех цифр, происходит их обработка в обратном порядке с целью формирования числа.
- При обработке каждой цифры, она добавляется к текущему значению переменной
vume, которая инициализируется нулем. - Полученное значение затем делится на 10, обеспечивая таким образом перенос разряда в следующий разряд числа.
- После обработки всех цифр, число выводится на экран.