Преобразование заданного числа в разные системы счисления - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста. У меня задание - преобразование заданного числа в разные системы счисления. Вот кусок кода: - Проблема в том, что ответ записывается в обратном порядке. Например, ответ должен быть 1234, а мне выводит 4321. Как это исправить?
Листинг программы
  1. #include<stdio.h>
  2. #include<conio.h>
  3. int main()
  4. {
  5. int c, x, i, v;
  6. char l;
  7. printf("Enter number and letter, please:\n");
  8. scanf("%d %c", &c, &l);
  9. printf("Number: %d\nLetter: %d\n", c, l);
  10. x = c;
  11. printf("Binary form of number:");
  12. while (x>0)
  13. {
  14. i=x%2;
  15. x=x/2;
  16. printf("%d", i);
  17. }
  18. printf("\nBinary form of letter:");
  19. x = l;
  20. while (x>0)
  21. {
  22. i=x%2;
  23. x=x/2;
  24. printf("%d", i);
  25. }

Решение задачи: «Преобразование заданного числа в разные системы счисления»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. void print_dectobin(unsigned);
  4. void print_dectohex(unsigned x);
  5. void print_dectooct(unsigned x);
  6.  
  7. int main(int argc, char **argv) {
  8.     unsigned x;
  9.     printf("Input number > ");
  10.     scanf("%d", &x);
  11.  
  12.     print_dectobin(x);
  13.  
  14.     print_dectohex(x);
  15.  
  16.     print_dectooct(x);
  17.  
  18.     return 0;
  19. }
  20.  
  21. void print_dectohex(unsigned x) {
  22.     long int quotient;
  23.     int i=1,j,temp;
  24.     char hexadecimalNumber[100];
  25.  
  26.  
  27.     quotient = x;
  28.  
  29.     while (quotient != 0) {
  30.         temp = quotient % 16;
  31.  
  32.         //To convert integer into character
  33.         if (temp < 10)
  34.             temp = temp + 48;
  35.         else
  36.             temp = temp + 55;
  37.  
  38.         hexadecimalNumber[i++] = temp;
  39.  
  40.         quotient = quotient / 16;
  41.     }
  42.  
  43.     printf("hex: ");
  44.  
  45.     for (j = i - 1; j > 0; j--) {
  46.         printf("%c", hexadecimalNumber[j]);
  47.     }
  48.  
  49.     printf("\n");
  50. }
  51.  
  52. void print_dectooct(unsigned int x) {
  53.     long int quotient;
  54.     int octalNumber[100], i = 1, j;
  55.  
  56.  
  57.     quotient = x;
  58.  
  59.     while (quotient != 0) {
  60.         octalNumber[i++] = quotient % 8;
  61.  
  62.         quotient = quotient / 8;
  63.     }
  64.  
  65.     printf("oct: ");
  66.  
  67.     for (j = i - 1; j > 0; j--) {
  68.         printf("%d", octalNumber[j]);
  69.     }
  70.  
  71.     printf("\n");
  72. }
  73.  
  74. void print_dectobin(unsigned x) {
  75.     unsigned mask = 1, i;
  76.  
  77.     mask <<= sizeof(unsigned) * 8 - 1;
  78.  
  79.     printf("bin: ");
  80.  
  81.     for (i = 1; i <= sizeof(unsigned) * 8; i++) {
  82.         printf("%c", x & mask ? '1' : '0');
  83.  
  84.         x <<= 1;
  85.  
  86.         if (!(i % 8)) {
  87.             printf(" ");
  88.         }
  89.     }
  90.  
  91.     printf("\n");
  92. }

Объяснение кода листинга программы

Код преобразует введенное пользователем число в двоичную, восьмеричную и шестнадцатеричную системы счисления.

  1. В функции main объявлены три функции: print_dectobin, print_dectohex и print_dectooct.
  2. Затем в функции main считывается число от пользователя и передается в функции print_dectobin, print_dectohex и print_dectooct соответственно.
  3. Функция print_dectohex преобразует число в шестнадцатеричную систему счисления. Для этого используется цикл, который делит число на 16 и сохраняет остаток в переменной temp. Затем temp преобразуется в соответствующий символ и записывается в массив hexadecimalNumber. После цикла в массиве остается одна цифра, которая также добавляется в итоговую строку.
  4. Функция print_dectooct преобразует число в восьмеричную систему счисления. Для этого используется цикл, который делит число на 8 и сохраняет остаток в массиве octalNumber. После цикла в массиве остается одна цифра, которая также добавляется в итоговую строку.
  5. Функция print_dectobin преобразует число в двоичную систему счисления. Для этого используется цикл, который делит число на 2 в сдвинутом на 1 влево виде (x <<= 1). При каждом шаге цикла проверяется, является ли маска (mask) равной 1. Если да, то в итоговую строку добавляется символ '1', иначе '0'. После цикла в итоговой строке остаются пробелы, которые разделяют группы из 8 цифр.
  6. В конце функции main вызываются все три функции и выводится итоговая строка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы