Перевод чисел в различные системы счисления - C (СИ)
Формулировка задачи:
Всем доброе время суток)
Есть задача:
На входе Этот код рабочий, это максимум что я смог.
А нужно чтобы строки были на выходе, т.е. можно пользоваться только %s в printf е
Т.е. последний строки должны выглядеть не так:
А так:
Да, и в фунцкции dec_v_bin(int x), тоже не printf("%d",Ch[k]); А printf("%s",Ch[k]);
Помогите))
строка
с числом в шестнадцатиричной форме. Распознать строку в переменную типа 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; }
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); //двоичной
Решение задачи: «Перевод чисел в различные системы счисления»
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; }
Объяснение кода листинга программы
- Установка локали на русский язык.
- Объявление переменных: целое число
chislo
, размер числа в байтахsize
, счетчикi
. - Вывод сообщения с просьбой ввести число.
- Считывание числа с помощью функции
std::cin
. - Вывод двоичного кода числа.
- Цикл выводит двоичный код числа, начиная с старшего бита, до младшего бита.
- Объявление переменной
rez
для хранения результата перевода числа в различные системы счисления. - Цикл перебирает биты числа, начиная с старшего бита, и добавляет его в
rez
, сдвигая его вправо наi
позиций. - Вывод результата.
- Вызов функции
system(
pause)
для приостановки программы до нажатия клавиши. - Возврат значения
EXIT_SUCCESS
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д