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

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

  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
Похожие ответы