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

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

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

С клавиатуры ввести целое беззнаковое число. Сформировать символьною строку, в который занести три цифры троичного кода этого числа. Напечатать строку с троичным кодом и указать, сколько раз в нем повторяется каждая из цифр.

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <Windows.h>
  3.  
  4. char reVal(int num)
  5. {
  6.     if (num >= 0 && num <= 9)
  7.         return (char)(num + '0');
  8.     else
  9.         return (char)(num - 10 + 'A');
  10. }
  11.  
  12. void strev(char *str)
  13. {
  14.     int len = strlen(str);
  15.     int i;
  16.     for (i = 0; i < len / 2; i++)
  17.     {
  18.         char temp = str[i];
  19.         str[i] = str[len - i - 1];
  20.         str[len - i - 1] = temp;
  21.     }
  22. }
  23.  
  24. char* fromDeci(char res[], int inputNum)
  25. {
  26.     int index = 0;  
  27.     while (inputNum > 0)
  28.     {
  29.         res[index++] = reVal(inputNum % 3);
  30.         inputNum /= 3;
  31.     }
  32.     res[index] = '\0';
  33.  
  34.     strev(res);
  35.  
  36.     return res;
  37. }
  38.  
  39. int main(){
  40.     int i, count_of_2 = 0, count_of_1 = 0, count_of_0 = 0;
  41.     int inputNum = 251439;
  42.     char result [64];
  43.     printf("Equivalent of %d in ternary numerical system is "
  44.         " %s\n", inputNum, fromDeci(result, inputNum));
  45.     for (i = 0; i < strlen(result); i++) {
  46.         if (result[i] == '2')
  47.             count_of_2++;
  48.         else if (result[i] == '1')
  49.             count_of_1++;
  50.         else if (result[i] == '0')
  51.             count_of_0++;
  52.     }
  53.     printf("Number of 2: %d\nNumber of 1: %d\nNumber of 0: %d", count_of_2, count_of_1, count_of_0);
  54.  
  55.     system("pause");
  56.     return 0;
  57. }

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

  1. В функции reVal(int num) происходит перевод десятичного числа в троичное и возвращается символ, соответствующий полученному числу. Если число в диапазоне от 0 до 9, то возвращается соответствующий символ от '0' до '9'. Если число в диапазоне от 10 до 19, то возвращается соответствующий символ от 'A' до 'I'.
  2. В функции strev(char *str) происходит переворот строки str. Изначально определяется длина строки с помощью функции strlen(str). Затем в цикле, для каждой пары символов, начиная с начала и конца строки, происходит их перестановка с помощью временной переменной temp.
  3. В функции fromDeci(char res[], int inputNum) происходит перевод десятичного числа в троичное и запись результата в массив res. Изначально устанавливается индекс index = 0. Затем в цикле, пока inputNum больше 0, происходит запись в res значения reVal(inputNum % 3) и деление inputNum на 3. В конце добавляется символ '\0' в конец строки res. После этого выполняется функция strev(res), чтобы перевернуть полученную строку, и результат записывается в переменную res. В конце функция возвращает res.
  4. В функции main() определяется несколько переменных: i, count_of_2, count_of_1, count_of_0. Изначально устанавливаются значения count_of_2 = 0, count_of_1 = 0, count_of_0 = 0. Затем определяется входное число inputNum равное 251439. Создается массив result размером 64 символа для хранения результата перевода. Выводится сообщение с результатом перевода в троичную систему счисления с помощью функции printf(). Затем выполняется цикл для подсчета количества символов '2', '1' и '0' в полученном результате. Выводится количество каждого символа с помощью функции printf(). В конце выполняется функция system(pause) для приостановки выполнения программы до нажатия клавиши и возвращается 0.

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


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

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

8   голосов , оценка 4.125 из 5

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

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

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