Эй! Я узнаю известное домашнее задание, которое у меня было на первом курсе моей школы (@Epitech ученики: не копируйте / вставляйте следующий код, попробуйте придумать свое собственное решение, это для вашего же блага ^^)
Решение вашей проблемы - выполнить ее рекурсивно:
void my_putnbr_base(int num, int base)
{
int start;
int remainder;
remainder = num % base;
start = (num - remainder) / base;
if (start != 0)
my_putnbr_base(start, base);
if (remainder >= 10)
printf("%c", remainder + 55);
else
printf("%d", remainder);
}
Указывает ли ваша домашняя работа, что она должна работать только с положительными числами? Если нет, то легко включить обработку отрицательных чисел:
void my_putnbr_base(int num, int base)
{
int start;
int remainder;
if (num < 0)
{
putchar('-');
my_putnbr_base(-num, base);
}
else
{
remainder = num % base;
start = (num - remainder) / base;
if (start != 0)
my_putnbr_base(start, base);
if (remainder >= 10)
printf("%c", remainder + 55);
else
printf("%d", remainder);
}
}
@ arno: это правда, потому что код примера использует таблицу ASCII. Если мы хотим что-то действительно гибкое, нам нужна база в параметре. Например:
>> my_putnbr_base(4242, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")
39U
>> my_putnbr_base(42, "0123456789ABCDEF")
2A
это реализует пример:
void my_putnbr_base(int num, char *base)
{
int start;
int remainder;
int len;
len = strlen(base);
if (num < 0)
{
putchar('-');
my_putnbr_base(-num, base);
}
else
{
remainder = num % len;
start = (num - remainder) / len;
if (start != 0)
my_putnbr_base(start, base);
printf("%c", base[remainder]);
}
}
Надеюсь, это решит вашу проблему!
edit: я не правильно прочитал ^^ Вам не разрешено использовать функции, поэтому о рекурсии не может быть и речи ... Вот интерактивный способ, вы можете поместить это в main (). Вы можете улучшить этот код, добавив обработку отрицательных чисел и гибкие базы, как я показал вам:)
int my_putnbr_base_it(int num, int base)
{
unsigned int quotient = 1;
unsigned int remainder;
while ((num / quotient) >= base)
quotient *= base;
while (quotient)
{
if ((remainder = (num / quotient) % base) < 10)
printf("%d", remainder);
else
printf("%c", 55 + remainder);
quotient /= base;
}
return (0);
}
Надеюсь, теперь все решено!