Создать программу по переводу чисел из одной системы счисления в другую (рекурсия) - C (СИ)
Формулировка задачи:
Здравствуйте! Помогите пожалуйста выполнить задание по Си из книги Прата. Вообще нужно создать программу рекурсивную по переводу из десятичной системы исчисления в двоичную, восьмеричную и так далее до 10.
Решение задачи: «Создать программу по переводу чисел из одной системы счисления в другую (рекурсия)»
textual
Листинг программы
char* convert(int n,int base,char* s)
{
if(!n) return s;
*--s=n%base+'0';
return convert(n/base,base,s);
}
void main(int argc,char* argv[])
{
int i,n;
char *p,s[33]="";
printf("n:");
scanf("%d",&n);
for(i=2; i<=10; i++)
{
p=convert(n,i,s+sizeof(s)-1);
printf("%s base %d\n",p,i);
}
system("pause");
}
Объяснение кода листинга программы
- Функция
convertпринимает три аргумента: целое числоn, основание системы счисленияbaseи указатель на строкуs. - Если
nравно нулю, функция возвращает указатель на строкуs. - В противном случае функция выполняет следующие действия:
- Делает ссылку на последний символ строки
sи присваивает ему значение остатка от деленияnнаbase, приведенного к целочисленному типу с основанием 10, и преобразует его в символ. - Возвращает результат рекурсивного вызова функции
convertс аргументамиn/base,baseи указателем на обновленную строку.
- Делает ссылку на последний символ строки
- В функции
mainопределены следующие переменные:int i, n;- для инициализации счетчика и ввода числа соответственно.char *p;- для хранения результата работы функцииconvert.char s[33] = ``;- для хранения результата перевода числа в строку.
- Пользователю предлагается ввести число, после чего выполняется цикл, который итерируется от 2 до 10 и вызывает функцию
convertдля каждого значения основания системы счисления. - Результат работы функции
convertвыводится на экран вместе с значением основания системы счисления. - В конце программы вызывается функция
system(pause), чтобы приостановить выполнение программы до нажатия клавиши.