Перевод из десятичной в троичную - C (СИ)
Формулировка задачи:
С клавиатуры ввести целое беззнаковое число. Сформировать символьною строку, в который занести три цифры троичного кода этого числа. Напечатать строку с троичным кодом и указать, сколько раз в нем повторяется каждая из цифр.
Решение задачи: «Перевод из десятичной в троичную»
textual
Листинг программы
- #include <stdio.h>
- #include <Windows.h>
- char reVal(int num)
- {
- if (num >= 0 && num <= 9)
- return (char)(num + '0');
- else
- return (char)(num - 10 + 'A');
- }
- void strev(char *str)
- {
- int len = strlen(str);
- int i;
- for (i = 0; i < len / 2; i++)
- {
- char temp = str[i];
- str[i] = str[len - i - 1];
- str[len - i - 1] = temp;
- }
- }
- char* fromDeci(char res[], int inputNum)
- {
- int index = 0;
- while (inputNum > 0)
- {
- res[index++] = reVal(inputNum % 3);
- inputNum /= 3;
- }
- res[index] = '\0';
- strev(res);
- return res;
- }
- int main(){
- int i, count_of_2 = 0, count_of_1 = 0, count_of_0 = 0;
- int inputNum = 251439;
- char result [64];
- printf("Equivalent of %d in ternary numerical system is "
- " %s\n", inputNum, fromDeci(result, inputNum));
- for (i = 0; i < strlen(result); i++) {
- if (result[i] == '2')
- count_of_2++;
- else if (result[i] == '1')
- count_of_1++;
- else if (result[i] == '0')
- count_of_0++;
- }
- printf("Number of 2: %d\nNumber of 1: %d\nNumber of 0: %d", count_of_2, count_of_1, count_of_0);
- system("pause");
- return 0;
- }
Объяснение кода листинга программы
- В функции reVal(int num) происходит перевод десятичного числа в троичное и возвращается символ, соответствующий полученному числу. Если число в диапазоне от 0 до 9, то возвращается соответствующий символ от '0' до '9'. Если число в диапазоне от 10 до 19, то возвращается соответствующий символ от 'A' до 'I'.
- В функции strev(char *str) происходит переворот строки str. Изначально определяется длина строки с помощью функции strlen(str). Затем в цикле, для каждой пары символов, начиная с начала и конца строки, происходит их перестановка с помощью временной переменной temp.
- В функции fromDeci(char res[], int inputNum) происходит перевод десятичного числа в троичное и запись результата в массив res. Изначально устанавливается индекс index = 0. Затем в цикле, пока inputNum больше 0, происходит запись в res значения reVal(inputNum % 3) и деление inputNum на 3. В конце добавляется символ '\0' в конец строки res. После этого выполняется функция strev(res), чтобы перевернуть полученную строку, и результат записывается в переменную res. В конце функция возвращает res.
- В функции 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д