Консультация № 194165
13.12.2018, 16:55
0.00 руб.
0 1 1
Здравствуйте! У меня возникли сложности с таким вопросом:
Рекурсивная процедура перевода натурального числа из десятичной системы счисления в N-ричную. Значение N в основной программе вводится с клавиатуры (2<N<16). Язык С. P.s. Можно с комментариями

Обсуждение

давно
Старший Модератор
312929
1973
18.12.2018, 14:01
общий
это ответ
Здравствуйте, lalka!

Вот вариант на "чистом" C:
[code lang=csharp]#include <stdio.h>

// Процедура перевода числа value в систему счисления по основанию N
// с записью результата в строку str
char* int2ascii(int value, char* str, unsigned char N)
{
// Для вывода цифр используются символы от 0 до 9
// а если основание больше 10 - от a до f
char digits[17] = "0123456789abcdef";
// Основание системы счмсления должно быть от 2 до 16
if (N<2||N>16) str = "N must be between 2 and 16";
// Для отрицательного числа возвращаем результат для соответствующего
// положительного числа, добавив перед ним символ "-"
else if (value<0) sprintf(str, "-%s", int2ascii(-value,str+1,N));
// Для однозначного (в выбранной системе счисления)
// числа возвращаем соответствующий символ
else if (value<N) sprintf(str, "%s%c", str, digits[value]);
// Для многозначного числа рекурсивно вызываем процедуру для
// числа без последней цифры (value/N) и возвращаем результат,
// добававив к нему символ последней цифры (value%N)
else sprintf(str, "%s%c", int2ascii(value/N,str,N), digits[value%N]);
return str;
}

int main()
{
int number, N;
do
{
// Вводим число
printf("Enter number: ");
scanf("%d", &number);
// Вводим основание системы счисления
printf("Enter N: ");
scanf("%d", &N);
// Создаём строку для записи результата
char string[33] = "\0";
// Вызываем процелуру перевода и выводим результат
printf("%s\n", int2ascii(number,string,N));
// Если число равно нулю - заканчиваем
} while (number);
}[/code]

Если нужен вариант на C++ (там код чуть короче), напишите, выложу в минифоруме.
5
Форма ответа