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


#include <stdio.h>
#include <string.h>


int convert_number(int num, int base, char *result) {
    if (base < 2 || base > 36) {
        printf("Основание системы счисления должно быть от 2 до 36\n");
        return 0;
    }
    
    int is_negative = 0;
    if (num < 0) {
        is_negative = 1;
        num = -num;
    }
    
    if (num == 0) {
        result[0] = '0';
        result[1] = '\0';
        return 1;
    }
    
    char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    char temp[100];
    int index = 0;
    
    while (num > 0) {
        int remainder = num % base;
        temp[index++] = digits[remainder];
        num = num / base;
    }
    
    int result_index = 0;
    if (is_negative) {
        result[result_index++] = '-';
    }
    
    for (int i = index - 1; i >= 0; i--) {
        result[result_index++] = temp[i];
    }
    result[result_index] = '\0'; 
    
    return 1;
}

int input_number() {
    int num;
    printf("Введите целое число в десятичной системе: ");
    
    while (scanf("%d", &num) != 1) {
        printf("Ошибка ввода! Пожалуйста, введите целое число: ");
        while (getchar() != '\n');
    }
    
    return num;
}

int input_base() {
    int base;
    printf("Введите основание системы счисления (2-36): ");
    
    while (1) {
        if (scanf("%d", &base) != 1) {
            printf("Ошибка ввода! Пожалуйста, введите целое число: ");
            while (getchar() != '\n');
            continue;
        }
        
        if (base >= 2 && base <= 36) {
            break;
        } else {
            printf("Основание должно быть от 2 до 36. Попробуйте еще раз: ");
        }
    }
    
    return base;
}

int main() {
    printf("Программа преобразования десятичных чисел в другие системы счисления\n");
    printf("====================================================================\n");
    
    char repeat;
    
    do {
        int num = input_number();
        int base = input_base();
        
        char result[100];
        if (convert_number(num, base, result)) {
            printf("Результат: %d (10) = %s (%d)\n", num, result, base);
        }
        
        printf("\nХотите выполнить еще одно преобразование? (y/n): ");
        scanf(" %c", &repeat);
        while (getchar() != '\n'); 
        
    } while (repeat == 'y' || repeat == 'Y');
    
    printf("Программа завершена. До свидания!\n");
    
    return 0;
}


Цель: изучить алгоритм преобразования целых чисел из десятичной системы счисления в любую другую систему счисления.
Задание: разработать программу, состоящую как минимум из двух пользовательских функций. Программа предназначена для преобразования десятичного числа к числу в произвольной системе счисления.
Число и основание системы счисления задаются по запросу программы во время ее работы.

Описание алгоритма преобразования числа.
Для преобразования числа M в систему счисления с основанием N  необходимо число делить на основание системы счисления до тех пор, пока последнее частное не станет меньше системы счисления. При этом выделяются целочисленные остатки от делений. Именно из них и последнего частного составляется искомый код.