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