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

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

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

Всем доброе время суток) Есть задача: На входе

строка

с числом в шестнадцатиричной форме. Распознать строку в переменную типа int. На выходе

строки

с введенным числом в двоичной, восьмиричной и десятичной форме. Нужно решить ее на

С

(не плюсах).Туплю, не могу решить. На паскале делал все норм. Но тут проблема, вобщем вот код:
#include <stdio.h>
#include <conio.h>
 
//функция для перевода интежеровского 10ого в интежеровский 2ичный
int dec_v_bin(int x) {
 int k,j,y,i;
 char Ch[32];
 
 for (i=0;i<32;i++) {      /* заполняем массив Ch[] */
     y=x&1;     //побитовое и, т.е. определяем 1 или ноль
     Ch[i]=y;   //затем записываем в массив
     x=x>>1;  //сдвигаем
 };
 
  for(j=31;j>=0;j-=1) {       /* Выводи массив Ch[] */
      if(Ch[j]!=0) {       
          for (k=j;k>=0;k-=1) {      //2 цикла которые переворачивают массив
                 printf("%d",Ch[k]);            
          };
          break;
      };
 };
  return 0;
 
}
 
//фунцкция перевода строки 16го формата в интежер 16го
 
int Str2Int16(char* str)
{
int i,r,n = strlen(str);
for(r=i=0;i<n;i++)
{
 r*=16;
 if(str[i]>='0'&& str[i]<='9') r+=str[i]-'0';
 if(str[i]>='A'&& str[i]<='F') r+=str[i]-'A'+10;
 if(str[i]>='a'&& str[i]<='f') r+=str[i]-'a'+10;
}
return r;
}

int main()
{
 char s[30];
 int dec;
 printf("Enter hex->");
 scanf("%s",s);          //вводим строку 16ое число
 dec=Str2Int16(s);    //запоминаем в dec уже интежер 16го
 
 printf("Dec: %d\n",dec);  //выводим в десятичной
 printf("Oct: %o\n",dec);  //восбмиричной
 dec_v_bin(dec);   //двоичной

 getch();
 return 0;
}
Этот код рабочий, это максимум что я смог. А нужно чтобы строки были на выходе, т.е. можно пользоваться только %s в printf е Т.е. последний строки должны выглядеть не так:
printf("Dec: %d\n",dec);  //выводим в десятичной
 printf("Oct: %o\n",dec);  //восбмиричной
 dec_v_bin(dec);   //двоичной
А так:
printf("Dec: %s\n",.....);  //выводим в десятичной
 printf("Oct: %s\n",...);  //восбмиричной
 dec_v_bin(dec);   //двоичной
Да, и в фунцкции dec_v_bin(int x), тоже не printf("%d",Ch[k]); А printf("%s",Ch[k]); Помогите))

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

textual
Листинг программы
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    int chislo, size(sizeof(chislo)*8), i;
    std::cout<<"Введите число:\n> ";
    std::cin>>chislo;
    std::cout<<"Двоичный код:\n< ";
    for(i = size-1; i >= 0; --i)
        std::cout<<((chislo>>i)&1);
    std::cout<<"\nРезультат:\n";
    int rez(0);
    for(i = size-1; i >= 0; --i)
        rez += ((chislo>>i)&1)<<(i);
    std::cout<<rez;
    std::cout<<std::endl;
    system("pause");
    return EXIT_SUCCESS;
}

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

  1. Установка локали на русский язык.
  2. Объявление переменных: целое число chislo, размер числа в байтах size, счетчик i.
  3. Вывод сообщения с просьбой ввести число.
  4. Считывание числа с помощью функции std::cin.
  5. Вывод двоичного кода числа.
  6. Цикл выводит двоичный код числа, начиная с старшего бита, до младшего бита.
  7. Объявление переменной rez для хранения результата перевода числа в различные системы счисления.
  8. Цикл перебирает биты числа, начиная с старшего бита, и добавляет его в rez, сдвигая его вправо на i позиций.
  9. Вывод результата.
  10. Вызов функции system(pause) для приостановки программы до нажатия клавиши.
  11. Возврат значения EXIT_SUCCESS.

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


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

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

13   голосов , оценка 3.615 из 5
Похожие ответы