C++中的2进制数转成8进制数代码如何写``

就是我输入一个2进制数```
他可以自动转成8进制数输出的代码```
而且要规定只能输入0和1这两个数```
有高手写下顺便解释下吗??
说的好概念啊```
有完整的程序吗??

睡不着觉4点钟就起来了,也多谢了你的这个问题帮我练了下脑子(让我头大的位运算)。

方法一:自己动手,丰衣足食。

提示:只要把输入的二进制数字符串转化为十进制就可以了,所以关键的地方就是to_decimal函数。

#include <iostream>
#include <string>
#include <iomanip>
#include <limits>
using namespace std;

// 使用长整型以便能最大限度地正确表达二进制数字符串所表达的整数
typedef unsigned long ulong;

// 长整型的最大位,在windows上一般和是int相同了32位
const ulong max_digit = numeric_limits<ulong>::digits;

// 检查输入
string check_input();

// 把字符串二进制数转换为十进制数
ulong to_decimal(const string& binary);

int main()
{
string binary = check_input();
ulong decimal = to_decimal(binary);
cout << endl;

cout.setf(ios_base::left | ios_base::showbase | ios_base::uppercase);
cout << setw(15) << "Binary" << ": " << binary << endl;
cout << setw(15) << "Decimal" << ": " << decimal << endl;

// 可以用不同输入/输出操作符来控制输入/输出的格式如oct和hex
cout << setw(15) << "Octonary" << ": " << oct << decimal << endl;
cout << setw(15) << "Hexadecimal" << ": " << hex << decimal << endl;
cout << endl;
}

// 检查输入的二进制数字符串是否合格
string check_input()
{
cout << "Please enter a binary number: ";
string binary;
do
{
getline(cin, binary);
// 检查是否输入为空
if(binary.empty())
cout << "Empty input! Try again: ";

// 检查是否输入了0和1以外的字符
else if(binary.find_first_not_of("10") != string::npos)
cout << "You can't enter other characters "
<< "except for 0 and 1.\nTry again: ";

// 检查是否输入的字符长度大于所能表达的最大位
else if(binary.size() > max_digit)
cout << "You can only enter " << max_digit << " digits of this number."
<< "\nTry again: ";
else
break;
}while(true);

// 返回检验合格的二进制数字符串
return binary;
}

// 把二进制数字符串转化为十进制数
ulong to_decimal(const string& binary)
{
typedef string::const_reverse_iterator rite;
ulong decimal = 0;

for(rite rit = binary.rbegin(); rit != binary.rend(); ++rit)
{
if(*rit == '0')
{
decimal >>= 1;
}
else
{
decimal >>= 1;
decimal |= 0x80000000;
}
}

decimal >>= max_digit - binary.size();
return decimal;
}

方法二:利用C++强大的标准库来达成。

#include <iostream>
#include <string>
#include <iomanip>
#include <limits>
#include <bitset> // 用标准库bitset
using namespace std;

// 使用长整型以便能最大限度地正确表达二进制数字符串所表达的整数
typedef unsigned long ulong;

// 长整型的最大位,在windows上一般和是int相同了32位
const ulong max_digit = numeric_limits<ulong>::digits;

// 检查输入
string check_input();

int main()
{
string binary(check_input());
// 转为10进制数
ulong decimal = bitset<numeric_limits<ulong>::digits>(binary).to_ulong();
cout << endl;

cout.setf(ios_base::left | ios_base::showbase | ios_base::uppercase);
cout << setw(15) << "Binary" << ": " << binary << endl;
cout << setw(15) << "Decimal" << ": " << decimal << endl;

// 可以用不同输入/输出操作符来控制输入/输出的格式如oct和hex
cout << setw(15) << "Octonary" << ": " << oct << decimal << endl;
cout << setw(15) << "Hexadecimal" << ": " << hex << decimal << endl;
cout << endl;
}

// 检查输入的二进制数字符串是否合格
string check_input()
{
cout << "Please enter a binary number: ";
string binary;
do
{
getline(cin, binary);
// 检查是否输入为空
if(binary.empty())
cout << "Empty input! Try again: ";

// 检查是否输入了0和1以外的字符
else if(binary.find_first_not_of("10") != string::npos)
cout << "You can't enter other characters "
<< "except for 0 and 1.\nTry again: ";

// 检查是否输入的字符长度大于所能表达的最大位
else if(binary.size() > max_digit)
cout << "You can only enter " << max_digit << " digits of this number."
<< "\nTry again: ";
else
break;
}while(true);

// 返回检验合格的二进制数字符串
return binary;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-02-27
char s[100];
//假设输入为一个数组
int k = 0;
//输出为一个整形
for (int i = strlen(s)-1, w = 1;i >=0 ;i--,w *= 2)
{
k += (s[i] - '0') * w; // k = 2进制各位和其位权的乘积
}
printf("%o\n",k);

C++中的2进制数转成8进制数代码如何写``
方法一:自己动手,丰衣足食。提示:只要把输入的二进制数字符串转化为十进制就可以了,所以关键的地方就是to_decimal函数。include <iostream> include <string> include <iomanip> include <limits> using namespace std;\/\/ 使用长整型以便能最大限度地正确表达二进制数字符串所表达的整数 typedef uns...

C++:二进制转换成八进制的代码
sum+= ((s[i]-'0')<<(m-i-1));\/\/<<是位操作符,表示二进制数向左移位,如001变为010,等效于sum+=((s[i]-'0')*2^(m-i-1));这样应该清楚了,如0101==0*2^3+1*2^2+0*2^1+1*2^0;即转为十进制 if(sum==0){ cout<<"0"<<endl;continue;} int a[10];i=0;w...

求用C语言编写代码,输入二进制数,输出十进制数,八进制数,十六进制数
binary[i]='\\0';for(i=0;binary[i];(n*=2)+=binary[i++]-'0');printf("To Dec is %d.\\nTo Oct is %o.\\nTo hex is %X.\\n",n,n,n);}

c++怎么二进制转换八进制?
printf("%o\\n",n);将十进制数n以八进制方式输出

C++程序求二进制转换成八进制和十六进制
int main(){ char a[8];int b[3]={0};int c[2]={0};int i,t,k;while(cin>>a){ for(i=0,t=0;i<8;i++){ if(i<2)b[0]=b[0]*2+a[i]-48;else if(i<5)b[1]=b[1]*2+a[i]-48;else b[2]=b[2]*2+a[i]-48;} for(i=0,t=0;i<8;i++){ if(i<...

C++ 二进制转8进制
C\/C++不支持输入输出二进制。3个3个划分是手工将二进制变为八进制的方法,是从右至左划分,最左边不足3位的前面用0补齐。10101101划分后是010,101,101,就是八进制的255。

求c++各进制转换的代码(double浮点数)
number\/=2;i++;} printf("这个数转为二进制后为:");for(; i>=0; i--){ printf("%d",arr[i]);} printf("\\n");} void octalsys(){ long int number,i=0;int arr[N];printf("请输入一个数:");scanf("%ld",&number);while(number>=0){ if(number<8){ arr[i]=number;...

利用顺序栈将二进制转换八进制
首先必须要搞清楚二进制和八进制的转换关系,由于 2 的三次方等于 8,故可以将二进制数字从右往左每三位一组就是一个八进制数字,前面不足的补 0。(例如:二进制的 1 010 100 000 111 101转换为八进制为:124075)然后设置一个堆栈的数据结构,在进行不同进制转换的过程中,需要对二进制的每一...

c++函数编程实现自然数的十进制、二进制、八进制、十六进制转换
cout<<"输入一个整数:"; cin>>n;do { cout<<"输入需要转换的进制:2-9,16,32(输入0退出)";cin>>choice;switch(choice){ case 2: Transform(n,2); break;case 3: Transform(n,3); break;case 4: Transform(n,4); break;case 5: Transform(n,5); break;case 6: ...

编程中,怎样把二进制转换为八进制?谢谢了!
我这里正好有写2进制转8进制,总的方法是先转10进制再转成8进制。include <iostream> using namespace std;char data_2[200];struct node { int data;node *next;}*head=new node;void read_data(char data[]){ cin>>data;} void del(node *p){ node *s;while (p){ s=p;p=p->...

相似回答
大家正在搜