#include <cmath>
#include <iostream>
#include <string>
using
namespace
std;
string binaryToOctal(string binary)
{
if
(binary.find_first_not_of(
"01."
) != string::npos) {
return
"Invalid binary number"
;
}
int
decimal = stoi(binary.substr(0, binary.find(
'.'
)),
nullptr, 2);
string octal =
""
;
while
(decimal > 0) {
octal = to_string(decimal % 8) + octal;
decimal /= 8;
}
if
(binary.find(
'.'
) != string::npos) {
double
fractional = stod(
"0."
+ binary.substr(binary.find(
'.'
) + 1));
octal +=
"."
;
for
(
int
i = 0; i < 5; i++) {
fractional *= 8;
octal += to_string((
int
)
floor
(fractional));
fractional -=
floor
(fractional);
}
}
return
octal;
}
int
main()
{
string binary1 =
"110001110"
;
string octal1 = binaryToOctal(binary1);
cout <<
"Octal equivalent of "
<< binary1 <<
" is "
<< octal1 << endl;
string binary2 =
"1111001010010100001"
;
string octal2 = binaryToOctal(binary2);
cout <<
"Octal equivalent of "
<< binary2 <<
" is "
<< octal2 << endl;
string binary3 =
"11011.10"
;
string octal3 = binaryToOctal(binary3);
cout <<
"Octal equivalent of "
<< binary3 <<
" is "
<< octal3 << endl;
string binary4 =
"1002"
;
string octal4 = binaryToOctal(binary4);
cout <<
"Octal equivalent of "
<< binary4 <<
" is "
<< octal4 << endl;
return
0;
}