Перевод с десятичной в восьмеричную систему счисления - C (СИ)

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

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

Написал такую вот программу:
Листинг программы
  1. #include <stdio.h>
  2. #include <stdafx.h>
  3. void main(void)
  4. {
  5. int n;
  6. scanf("%d", &n);
  7. printf("%o", n);
  8. }
Все работает, число переводится. Но преподавателю не понравилось, слишком просто. Каким еще способом можно написать данную программу?

Решение задачи: «Перевод с десятичной в восьмеричную систему счисления»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX_DECIMAL_NUMBER_LENGTH 9
  5. #define MAX_OCTAL_NUMBER_LENGTH 12
  6.  
  7. int input_decimal_number()
  8. {
  9.     static char buf[MAX_DECIMAL_NUMBER_LENGTH + 1];
  10.     fflush(stdin);
  11.     fgets(buf, sizeof(buf), stdin);
  12.     return strtol(buf, NULL, 10);
  13. }
  14.  
  15. char* number_to_octal_digits(int number)
  16. {
  17.     static char octal_digits[MAX_OCTAL_NUMBER_LENGTH + 1];
  18.     char* pos = octal_digits + MAX_OCTAL_NUMBER_LENGTH - 1;
  19.     for( ; pos >= octal_digits; --pos ) {
  20.         *pos = (number % 8) + '0';
  21.         number /= 8;
  22.         if( number <= 0 ) break;
  23.     }
  24.     octal_digits[MAX_OCTAL_NUMBER_LENGTH] = '\0';
  25.     return pos;
  26. }
  27.  
  28. int main(void)
  29. {
  30.     int number;
  31.     do {
  32.         number = input_decimal_number();
  33.         puts(number_to_octal_digits(number));
  34.     } while( number != 0 );
  35.  
  36.     return 0;
  37. }

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

  1. Объявлены две функции: input_decimal_number() и number_to_octal_digits().
  2. Функция input_decimal_number() считывает десятичное число с помощью fgets(), а затем использует strtol() для перевода строки в целое число.
  3. Функция number_to_octal_digits() переводит десятичное число в восьмеричное, используя цикл for для прохода по всем цифрам числа.
  4. Каждая цифра числа вычисляется как остаток от деления на 8, преобразуется в символ с помощью операции + '0' и записывается в буфер octal_digits.
  5. Число делится на 8, чтобы получить следующую цифру.
  6. Если результат деления равен 0, то цикл прерывается.
  7. В функции main() используется цикл do-while для считывания и вывода десятичных чисел до тех пор, пока не будет введено число, равное 0.
  8. Буфер octal_digits выделяется динамически в функции number_to_octal_digits(), и его размер устанавливается равным MAX_OCTAL_NUMBER_LENGTH + 1.

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


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

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

14   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы