Перевод с десятичной в восьмеричную систему счисления - C (СИ)
Формулировка задачи:
Написал такую вот программу:
Все работает, число переводится.
Но преподавателю не понравилось, слишком просто.
Каким еще способом можно написать данную программу?
#include <stdio.h> #include <stdafx.h> void main(void) { int n; scanf("%d", &n); printf("%o", n); }
Решение задачи: «Перевод с десятичной в восьмеричную систему счисления»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #define MAX_DECIMAL_NUMBER_LENGTH 9 #define MAX_OCTAL_NUMBER_LENGTH 12 int input_decimal_number() { static char buf[MAX_DECIMAL_NUMBER_LENGTH + 1]; fflush(stdin); fgets(buf, sizeof(buf), stdin); return strtol(buf, NULL, 10); } char* number_to_octal_digits(int number) { static char octal_digits[MAX_OCTAL_NUMBER_LENGTH + 1]; char* pos = octal_digits + MAX_OCTAL_NUMBER_LENGTH - 1; for( ; pos >= octal_digits; --pos ) { *pos = (number % 8) + '0'; number /= 8; if( number <= 0 ) break; } octal_digits[MAX_OCTAL_NUMBER_LENGTH] = '\0'; return pos; } int main(void) { int number; do { number = input_decimal_number(); puts(number_to_octal_digits(number)); } while( number != 0 ); return 0; }
Объяснение кода листинга программы
- Объявлены две функции:
input_decimal_number()
иnumber_to_octal_digits()
. - Функция
input_decimal_number()
считывает десятичное число с помощьюfgets()
, а затем используетstrtol()
для перевода строки в целое число. - Функция
number_to_octal_digits()
переводит десятичное число в восьмеричное, используя циклfor
для прохода по всем цифрам числа. - Каждая цифра числа вычисляется как остаток от деления на 8, преобразуется в символ с помощью операции
+ '0'
и записывается в буферoctal_digits
. - Число делится на 8, чтобы получить следующую цифру.
- Если результат деления равен 0, то цикл прерывается.
- В функции
main()
используется циклdo-while
для считывания и вывода десятичных чисел до тех пор, пока не будет введено число, равное 0. - Буфер
octal_digits
выделяется динамически в функцииnumber_to_octal_digits()
, и его размер устанавливается равнымMAX_OCTAL_NUMBER_LENGTH + 1
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д