Преобразование заданного числа в разные системы счисления - 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");
}

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

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

  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
Похожие ответы