#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 необходимо число делить на основание системы счисления до тех пор, пока последнее частное не станет меньше системы счисления. При этом выделяются целочисленные остатки от делений. Именно из них и последнего частного составляется искомый код.