Перевод чисел в различные системы счисления - 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.