8进制转换为2进制

lxw580 2003-05-30 05:56:18
刚开始学,问题有点简单,请各位大虾见谅!
先行谢过!
QQ:108412822
email:akkaidssos@163.com
//8进制转换为2进制!
#include<iostream.h>
char *p[8]={"000","001","010","011","100","101","110","111"};
char *a[8];//存储转换后的二进制代码!
void main()
{
int n,i,j=0;
cout<<"output a oct number:"<<endl;
cin>>n;
do
{
i=n%8;
cout<<p[i];//转换一个八进制数就输出,反序的
a[j]=p[i];
j++;
n=n/8;
}while(n!=0);
for(j;j>=0;j--)//顺序输出
cout<<a[j];
}
//没结果!执行时发生错误
//连结时间很长,是不是算法有问题!

...全文
194 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
koskinen 2003-06-04
  • 打赏
  • 举报
回复
对不起,我弄错了,
楼主程序的意思是输入十进制数通过八进制转为二进制数把,我看了半天也是只能这样理解啊
do 循环应写为
.......
do
{
if(n<8) {a[j]=p[n];
break;}
i=n%8;
//转换一个八进制数就输出,反序的
a[j]=p[i];
j++;

n=n/8;

}while(n!=0);
.......
楼主的cout<<p[i];不对的,这样是不会输出八进制数的,
要不你就再写一段输出八进制数的代码,不然就去掉,
留者也是输出错误的数干扰结果
koskinen 2003-06-04
  • 打赏
  • 举报
回复
楼主,你的do{......}循环有小错误,你仔细检查一下会发现,
最后一位会出错,你的程序里的最后一个p[j]会错,你仔细检查一下,
我做了改正,
do
{...
j++;
if(!(n/8)) {a[i]=p[j];}
n=n/8;
}
......
这样编译运行就对了;
写法不一定要我这样,我只是看到错误随意写的
lxw580 2003-06-03
  • 打赏
  • 举报
回复
TO:callzjy(【剑客西门吹雪原来是仁者帮帮主...】)
输入是八进制,所以10是十进制的8转化为二进制应为001000!
TO:chinajiji(菜鸟叽叽)
多谢大虾指点,可我还是不明白,错误在哪!编译-连结-执行都正确!
结果也正确!
QQ:108412822
skytears66 2003-05-31
  • 打赏
  • 举报
回复
转什么转呀 用格式控制符呀 再不成 一个switch语句就搞定呀 又快
cloudtarget 2003-05-31
  • 打赏
  • 举报
回复
#include "iostream.h"

char *p[8]={"000","001","010","011","100","101","110","111"};
char *a[8];//存储转换后的二进制代码!
void main()
{
int n,i,j=0;
cout<<"output a oct number:"<<endl;
cin>>n;
do
{
i=n%8;
cout<<p[i];//转换一个八进制数就输出,反序的
a[j++]=p[i];
n=n/8;
}while(n!=0);
cout<<endl;
for(--j;j>=0;j--)//顺序输出
cout<<a[j];
}
------------------------------
vc7.0下编绎通过,执行如下:
output a oct number:
10
010001
001010
Press any key to continue
chinajiji 2003-05-30
  • 打赏
  • 举报
回复
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <bitset>
using namespace std;

int main() {
int num = 0;
cin >> oct >> num;
if(cin.fail()) {
cout << "You must input a octal number!" << endl;
exit(-1);
}

cout << "octal: " << showbase << oct << num << endl;
cout << "decimal: " << dec << num << endl;
bitset<sizeof(int)*8> bits(num);
cout << "binary: " << bits << endl;
system("pause");
return 0;
}
wanchl 2003-05-30
  • 打赏
  • 举报
回复
先转换为十进制在化为八进制。毕竟你的CPU已经很快了。我们老师就是这样说的
chinajiji 2003-05-30
  • 打赏
  • 举报
回复
lxw580(lxw580):
你的程序即使改了以后,还是有N(N>5)个错误.
lxw580 2003-05-30
  • 打赏
  • 举报
回复
各位好,谢谢各位的指点,但我还是认为
a[j]=p[i];属于数组之间的附值,没什么错!
先把刚调试成功的源代码如下:
//8进制转换为2进制!
#include<iostream.h>
char *p[8]={"000","001","010","011","100","101","110","111"};
char *a[8];//存储转换后的二进制代码!
void main()
{
int n,i,j=0;
cout<<"output a oct number:"<<endl;
cin>>n;
cout<<"反序输出:";
do
{
i=n%10;
cout<<p[i];//转换一个八进制数就输出,反序的
a[j]=p[i];
j++;
n=n/10;
}while(n!=0);
cout<<endl;
cout<<"正序输出:";
for(--j;j>=0;j--)//顺序输出
cout<<a[j];
}

justaseeker 2003-05-30
  • 打赏
  • 举报
回复
snipersu:
you are right!
dragonlw:
你用的是数学的思维方式,建议楼主用boost库
dragonlw 2003-05-30
  • 打赏
  • 举报
回复
我的看法是先把8进制的数转换成10进制的。
然后在转换成2进制的。呵呵
走了个弯,不过效率也不差。
晨星 2003-05-30
  • 打赏
  • 举报
回复
同意楼上。
snipersu 2003-05-30
  • 打赏
  • 举报
回复
a[j]=p[i];
不能这样的。
用strcpy(a[j],p[j])并且在此之前要给a[j]分配内存。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧