Напишите программу, которая переводит переданное её целое число (возможно, отрицательное) в двоичный код. Используйте процедуру.
Входные данные
Входная строка содержит целое число N .
Выходные данные
Программа должна вывести двоичное представление переданного её числа.
Примеры
входные данные
5
выходные данные
101
входные данные
-14
выходные данные
-1110
#include <iostream>
#include <vector>
#include <array>
using namespace std;
int main(){
int n,o;
vector<int> numbers;
cin>>n;
int d;
if(n<0){
int s=n*(-1);
d=s;
}
else{
d=n;
}
while(d>1){
o=d%2;
d=d/2;
numbers.push_back(o);
}
numbers.push_back(d);
if(n<0){
cout<<"-";
for(int i=numbers.size() -1;i>=0;i--){
cout<<numbers[i];
}
}
else
{
for(int i=numbers.size() -1;i>=0;i--){
cout<<numbers[i];
}
}
}
Как можно улучшить код?
d = n < 0 ? -n : n
выглядит куда лучше семистрочного if/else.if(n<0) {
cout<<"-";
}
#include <iostream>
#include <string>
#include <locale>
using namespace std;
string to_bin(int n)
{
enum { Plus, Minus } sign = Plus;
if (n < 0) {
sign = Minus;
n = -n;
}
string result;
unsigned int mask = 0x80000000;
enum { Prefix, Value } state = Prefix;
while (mask != 0 && state == Prefix) {
if (n & mask) {
result += '1';
state = Value;
}
mask >>= 1;
}
while (mask != 0) {
result += (n & mask) ? '1' : '0';
mask >>= 1;
}
if (result.length() == 0)
result = '0';
if (sign == Minus)
result = '-' + result;
return result;
}
int main()
{
int n;
setlocale(LC_ALL, "");
cout << "Введите число:";
cin >> n;
cout << to_bin(n) << endl;
return 0;
}
#include <iostream>
#include <intrin.h>
#pragma intrinsic(_BitScanReverse)
inline bool bitCheck(int number, int n) {
return (number >> n) & 1;
}
int main() {
int input = 0;
std::cin >> input;
const bool negative = input < 0;
if (negative) {
input = -input;
std::cout << '-';
}
const int bwidth = _BitScanReverse(&index, input)) ? index + 1 : 1;
for (int i = bwidth - 1; i >= 0; i--)
std::cout << bitCheck(input, i);
}