Перевод из десятичной в троичную - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д