Преобразование заданного числа в разные системы счисления - 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
вызываются все три функции и выводится итоговая строка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д