#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
string BinToOct(string src) // Функция преобразование двоичной строки в восьмеричную.
{
int tmp_res = 0; // Переменная, в которую будет записано число.
for(int i = 0; i < src.length(); i++) // Проход по строке
tmp_res += (src[i] == '1') * (1 << (src.length() - i - 1)); // Запись числа в переменную
char c_str[20] = {0};
sprintf(c_str, "%o", tmp_res); // Преобразование числа в строку. %o означает, что число будет записано в восьмеричном виде
string res(c_str); // Возвращаемое значение
return res;
}
int main(int argc, char *argv[])
{
string str = BinToOct(argv[1]); // Преобразуем первый аргумент программы
return 0;
}
#include <string>
#include <iostream>
using namespace std;
// Функция преобразует строку, представляющую двоичное число (pszBinary),
// в строку, представляющую восьмиричное число (pszOctal)
// Алгоритм:
// 3 двоичных цифры преобразуются в одну восьмиричную.
// Исходная строка разбивается на группы по 3 цифры, начиная справа; крайняя
// левая группа может содержать от 1 до 3-х двоичных цифр.
// Затем каждая группа переводится в восьмиричную цифру (параллельно проверяется
// корректность исходной строки) и преобразуется в символ прибавлением '0'.
int bin2oct( string &sOctal, string &sBinary )
{
int len = sBinary.length();
int nRes = (len+2)/3; // число 8-ричных цифр в результате
// сколько первых цифр двоичного числа "пойдет" на первую цифру результата?
// 10,111,010,101
int n = len % 3;
if( n == 0 ) n = 3;
int p = 0;
while( len ) {
// преобразуем очередную группу
int d = 0;
for( int i = 0; i < n; ++i, ++p ) {
char ch = sBinary[p];
if( ch > '1' || ch < '0' )
return -1; // ошибка во входной строке - недвоичное число
d = (d << 1) + (ch == '1');
}
sOctal += d + '0';
len -= n;
n = 3;
}
return 0;
}
void main( int argc, char* argv[] )
{
string sOct, sBin;
if( argc > 1 )
sBin = argv[1];
else {
cout << "Enter a number in binary notation: ";
cin >> sBin;
}
if( bin2oct( sOct, sBin ) < 0 )
cout << "The provided string does not represent a number in binary notation!" << endl;
else
cout << "The number in octal notation = " << sOct << endl;
}
#include <string.h>
#include <iostream>
using namespace std;
// Функция преобразует строку, представляющую двоичное число (pszBinary),
// в строку, представляющую восьмиричное число (pszOctal)
// Алгоритм:
// 3 двоичных цифры преобразуются в одну восьмиричную.
// Исходная строка разбивается на группы по 3 цифры, начиная справа; крайняя
// левая группа может содержать от 1 до 3-х двоичных цифр.
// Затем каждая группа переводится в восьмиричную цифру (параллельно проверяется
// корректность исходной строки) и преобразуется в символ прибавлением '0'.
int bin2oct( char* pszOctal, const char* pszBinary )
{
int len = strlen( pszBinary );
int nRes = (len+2)/3; // число 8-ричных цифр в результате
// сколько первых цифр двоичного числа "пойдет" на первую цифру результата?
// 10,111,010,101
int n = len % 3;
if( n == 0 ) n = 3;
const char* p = pszBinary;
while( len ) {
int d = 0;
for( int i = 0; i < n; ++i, ++p ) {
if( *p > '1' || *p < '0' )
return -1; // ошибка во входной строке - недвоичное число
d = (d << 1) + (*p == '1');
}
*pszOctal++ = d + '0';
len -= n;
n = 3;
}
*pszOctal = 0;
return 0;
}
void main( int argc, char* argv[] )
{
char sOct[128];
int iRes;
if( argc > 1 )
iRes = bin2oct( sOct, argv[1] );
else {
cout << "Enter a number in binary notation: ";
char sBin[256];
cin >> sBin;
iRes = bin2oct( sOct, sBin );
}
if( iRes < 0 )
cout << "The provided string does not represent a number in binary notation!" << endl;
else
cout << "The number in octal notation = " << sOct << endl;
}
// s2 содержит исходное число в двоичной записи
long n = strtol( s2, NULL, 2 );
// s8 будет содержать строковое представление числа в восьмиричной системе
_ltoa( n, s8, 8 );
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.