Преобразование заданного числа в разные системы счисления - C (СИ)
Формулировка задачи:
Помогите пожалуйста. У меня задание - преобразование заданного числа в разные системы счисления. Вот кусок кода:
- Проблема в том, что ответ записывается в обратном порядке. Например, ответ должен быть 1234, а мне выводит 4321. Как это исправить?
#include<stdio.h>
#include<conio.h>
int main()
{
int c, x, i, v;
char l;
printf("Enter number and letter, please:\n");
scanf("%d %c", &c, &l);
printf("Number: %d\nLetter: %d\n", c, l);
x = c;
printf("Binary form of number:");
while (x>0)
{
i=x%2;
x=x/2;
printf("%d", i);
}
printf("\nBinary form of letter:");
x = l;
while (x>0)
{
i=x%2;
x=x/2;
printf("%d", i);
}Решение задачи: «Преобразование заданного числа в разные системы счисления»
textual
Листинг программы
#include <stdio.h>
void print_dectobin(unsigned);
void print_dectohex(unsigned x);
void print_dectooct(unsigned x);
int main(int argc, char **argv) {
unsigned x;
printf("Input number > ");
scanf("%d", &x);
print_dectobin(x);
print_dectohex(x);
print_dectooct(x);
return 0;
}
void print_dectohex(unsigned x) {
long int quotient;
int i=1,j,temp;
char hexadecimalNumber[100];
quotient = x;
while (quotient != 0) {
temp = quotient % 16;
//To convert integer into character
if (temp < 10)
temp = temp + 48;
else
temp = temp + 55;
hexadecimalNumber[i++] = temp;
quotient = quotient / 16;
}
printf("hex: ");
for (j = i - 1; j > 0; j--) {
printf("%c", hexadecimalNumber[j]);
}
printf("\n");
}
void print_dectooct(unsigned int x) {
long int quotient;
int octalNumber[100], i = 1, j;
quotient = x;
while (quotient != 0) {
octalNumber[i++] = quotient % 8;
quotient = quotient / 8;
}
printf("oct: ");
for (j = i - 1; j > 0; j--) {
printf("%d", octalNumber[j]);
}
printf("\n");
}
void print_dectobin(unsigned x) {
unsigned mask = 1, i;
mask <<= sizeof(unsigned) * 8 - 1;
printf("bin: ");
for (i = 1; i <= sizeof(unsigned) * 8; i++) {
printf("%c", x & mask ? '1' : '0');
x <<= 1;
if (!(i % 8)) {
printf(" ");
}
}
printf("\n");
}
Объяснение кода листинга программы
Код преобразует введенное пользователем число в двоичную, восьмеричную и шестнадцатеричную системы счисления.
- В функции
mainобъявлены три функции:print_dectobin,print_dectohexиprint_dectooct. - Затем в функции
mainсчитывается число от пользователя и передается в функцииprint_dectobin,print_dectohexиprint_dectooctсоответственно. - Функция
print_dectohexпреобразует число в шестнадцатеричную систему счисления. Для этого используется цикл, который делит число на 16 и сохраняет остаток в переменнойtemp. Затемtempпреобразуется в соответствующий символ и записывается в массивhexadecimalNumber. После цикла в массиве остается одна цифра, которая также добавляется в итоговую строку. - Функция
print_dectooctпреобразует число в восьмеричную систему счисления. Для этого используется цикл, который делит число на 8 и сохраняет остаток в массивеoctalNumber. После цикла в массиве остается одна цифра, которая также добавляется в итоговую строку. - Функция
print_dectobinпреобразует число в двоичную систему счисления. Для этого используется цикл, который делит число на 2 в сдвинутом на 1 влево виде (x <<= 1). При каждом шаге цикла проверяется, является ли маска (mask) равной 1. Если да, то в итоговую строку добавляется символ '1', иначе '0'. После цикла в итоговой строке остаются пробелы, которые разделяют группы из 8 цифр. - В конце функции
mainвызываются все три функции и выводится итоговая строка.