Как записать число в строку в обратном порядке? - C (СИ)

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

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

Только начал изучать программирование. Задали задачу. Есть число а = 12389329, есть массив buf[1024]. Надо записать число в массив в виде строки и записать число в файл. Создал цикл, но проблема в том, что цифры "выходят" в обратном порядке. Что мне сделать дальше? Помогите пожалуйста!
#include <stdio.h>
 
void main (void)
{
    int a = 12389329;
    char buf[1024];
    while (a > 0)
    {
        b = a % 10;
        a /= 10;
        b += 48;

Решение задачи: «Как записать число в строку в обратном порядке?»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void inplace_reverse(char * string) {
    if (string) {
        char * end = string + strlen(string) - 1;
 
#define XOR_SWAP(a,b) do\
        {\
          a ^= b;\
          b ^= a;\
          a ^= b;\
        } while (0)
 
        while (string < end) {
            XOR_SWAP(*string, *end);
 
            string++;
 
            end--;
        }
#undef XOR_SWAP
    }
}
 
void strrev(char *buffer) {
  char *temp = buffer;
 
  while(temp && *temp) {
      ++temp;
  }
 
  for(--temp; buffer < temp; ++buffer, --temp)
    *buffer = *buffer ^ *temp,
    *temp = *buffer ^ *temp,
    *buffer = *buffer ^ *temp;
}
 
int main(void) {
    int a = 12389329;
    char buf[1024];
 
    sprintf(buf, "%d", a);
 
    printf("Число: %s\n", buf);
 
    strrev(buf);
 
    printf("Число: %s\n", buf);
 
    FILE* fd = fopen("file/number.txt", "w");
 
    if (fd == NULL) {
        printf("Ошибка открытия файла!\n");
 
        exit(1);
    }
 
    fprintf(fd, "%s\n", buf);
 
    fclose(fd);
 
    return EXIT_SUCCESS;
}

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

  1. Включаются необходимые заголовочные файлы: stdio.h, stdlib.h и string.h
  2. Определяются две функции: inplace_reverse и strrev.
  3. Функция inplace_reverse принимает указатель на строку и инвертирует её порядок символов. Используется техника XOR_SWAP для обмена символами.
  4. Функция strrev принимает указатель на строку и переворачивает её. Она сначала находит конец строки, затем начинает обратное перебирание символов и меняет их местами с символами, идущими слева от них.
  5. В функции main создается переменная a со значением 12389329.
  6. Создается буферная строка buf размером 1024 символа.
  7. В строку buf записывается число a, используя функцию sprintf.
  8. Выводится число в обратном порядке, используя функцию strrev и printf.
  9. Открывается файл file/number.txt для записи, используя функцию fopen.
  10. Если файл не может быть открыт, выводится сообщение об ошибке и программа завершается с кодом ошибки 1.
  11. В файл записывается число в обратном порядке, используя функцию fprintf.
  12. Файл закрывается с помощью функции fclose.
  13. Программа завершается с кодом успеха EXIT_SUCCESS.

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


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

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

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