Please review this code. How can I optimise this code?
#include <iostream>
#include <vector>
#include <algorithm> // std::reverse
#include <cmath> // pow()
typedef unsigned long long int ulli;
bool is_binary(ulli num)
{
bool status = true;
while (true)
{
if (num == 0)
{
break;
}
else
{
int temp = num % 10;
if (temp > 1)
{
status = false;
break;
}
num = num / 10;
}
}
return status;
}
std::vector<ulli> decimal_to_binary(int val)
{
std::vector<ulli> result;
int rem;
if (val == 0)
{
result.push_back(0);
return result;
}
while (val != 0)
{
rem = val % 2;
result.push_back(rem);
val = val / 2;
}
std::reverse(result.begin(), result.end());
return result;
}
int binary_to_decimal(ulli val)
{
int sum = 0;
int rem, i = 0;
while (val > 0)
{
rem = val % 10;
sum += pow(2, i) * rem;
val = val / 10;
i++;
}
return sum;
}
void display(std::vector<ulli>& vec)
{
for (int i = 0; i < vec.size(); i++)
{
std::cout << vec[i];
}
std::cout << '\n';
}
int main()
{
int option;
std::cout << "1. Decimal to Binary \n2. Binary to Decimal \n";
std::cout << "Enter your option\n";
std::cin >> option;
switch(option)
{
case 1:
{
int num;
std::cout <<"\nEnter Decimal number\n";
std::cin >> num;
std::vector<ulli> binary = decimal_to_binary(num);
std::cout << "The binary equivalent of " << num <<" is :\n";
display(binary);
break;
}
case 2:
{
ulli binary_num;
x:
std::cout << "\nEnter Binary number\n";
std::cin >> binary_num;
bool flag = is_binary(binary_num);
if (!flag)
{
std::cout << "The number is not binary\n";
goto x;
}
int decimal = binary_to_decimal(binary_num);
std::cout << "The decimal equivalent of " << binary_num << " is :\n";
std::cout << decimal << '\n';
break;
}
default: std::cout << "Enter option 1 or 2\n";
}
}