Программа для перевода в любую систему счисления - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
main()
{
int n;
const int radix;
setlocale(0, "");
do {
printf("Введите число в 10-чной системе счисления для перевода:\n");
scanf_s("%d", &n);
} while(n<0);
printf("Введите систему счисления в которую вы хотите перевести число:\n");
scanf_s("%d", &radix);
char buffer[] = "00000000";
int i = radix;
do {
int x = n % radix;
n = n / radix;
char z;
if( x<10 )
z='0'+x;
else
z='A'-10+x;
buffer = z;
i--;
} while (n>0);
printf("\nЗапись в %d-чной системе счисления: %s\n", radix, buffer);
}Решение задачи: «Программа для перевода в любую систему счисления»
textual
Листинг программы
char buffer[33] = "", z;
char *p=buffer+32;
do {
x = n % radix;
z=x+((x<10)?'0':'A'-10);
*--p=z;
n/= radix;
} while (n);
printf("\nЗапись в %d-чной системе счисления: %s\n", radix, p);
Объяснение кода листинга программы
- Объявляется массив buffer типа char с размером 33 символа и инициализируется пустой строкой.
- Указатель p инициализируется значением buffer+32, т.е. указывает на последний элемент массива buffer.
- Запускается цикл do-while, который выполняется до тех пор, пока переменная n не станет равной нулю.
- Внутри цикла переменная x вычисляется как остаток от деления n на radix.
- Затем переменная z вычисляется как сумма x и ('0' в случае, если x меньше или равно 9, или 'A'-10 в противном случае).
- Значение z записывается в память по адресу, указываемому p (т.е. в обратном порядке в массиве buffer).
- Переменная n делится на radix.
- Цикл выполняется заново.
- После окончания цикла, в консоль выводится строка, представляющая запись в radix-ной системе счисления, начиная с последнего символа массива buffer (т.е. с самого старшего разряда числа).