Перевод из десятичной в троичную - 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.