Загрузка данных


#include <stdio.h>
#include <string.h> // Для работы со строками (переворот результата)

// Функция 1: Преобразование числа и получение строки результата
// Принимает: число для перевода, основание системы счисления, строку для записи ответа
void convertNumber(int number, int base, char result[]) {
    // Массив символов для цифр больше 9 (A, B, C, D, E, F)
    char digits[] = "0123456789ABCDEF";
    
    // Временный массив для хранения остатков в обратном порядке
    char temp[65]; 
    int index = 0; // Счетчик для записи в массив temp

    // Обрабатываем случай, когда число равно 0
    if (number == 0) {
        result[0] = '0';
        result[1] = '\0'; // Конец строки
        return;
    }

    // Алгоритм: делим число на основание, пока оно больше 0
    while (number > 0) {
        int remainder = number % base;       // 1. Получаем остаток от деления
        temp[index] = digits[remainder];     // 2. Записываем символ, соответствующий остатку
        index++;                             // 3. Двигаем указатель
        number = number / base;              // 4. Уменьшаем число (делим на основание)
    }
    temp[index] = '\0'; // Завершаем временную строку

    // Переворачиваем строку temp в result, так как остатки записаны с конца
    int j = 0;
    for (int i = index - 1; i >= 0; i--) {
        result[j] = temp[i];
        j++;
    }
    result[j] = '\0'; // Завершаем итоговую строку
}

// Функция 2: Проверка корректности ввода основания системы счисления
// Возвращает 1, если основание от 2 до 16, иначе 0
int isValidBase(int base) {
    if (base >= 2 && base <= 16) {
        return 1;
    } else {
        printf("Ошибка: Основание должно быть от 2 до 16.\n");
        return 0;
    }
}

int main() {
    int decimalNumber;
    int base;
    char finalResult[65]; // Строка для хранения итогового числа

    printf("=== ПРЕОБРАЗОВАТЕЛЬ СИСТЕМ СЧИСЛЕНИЯ ===\n");
    
    // Запрос десятичного числа
    printf("Введите целое десятичное число: ");
    scanf("%d", &decimalNumber);

    // Проверка на отрицательное число (программа для простоты работает с положительными)
    if (decimalNumber < 0) {
        printf("Программа работает только с положительными числами.\n");
        return 1;
    }

    // Запрос основания с проверкой
    do {
        printf("Введите основание новой системы счисления (2-16): ");
        scanf("%d", &base);
    } while (!isValidBase(base)); // Повторяем, пока основание не станет правильным

    // Вызов первой функции для выполнения перевода
    convertNumber(decimalNumber, base, finalResult);

    // Вывод результата
    printf("\nЧисло %d в %d-ричной системе счисления = %s\n", decimalNumber, base, finalResult);

    return 0;
}