| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 960 人关注过本帖
标题:二进制转八进制怎么编?
只看楼主 加入收藏
x906271196
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2013-11-25
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:12 
二进制转八进制怎么编?
二进制转八进制怎么编?
搜索更多相关主题的帖子: 二进制 八进制 
2013-12-12 14:01
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:10 
二进制,八进制,十进制,十六进制互相转化的C语言源代码  
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void D_B(int);
void D_O(int);
void D_X(int);
void B_D(int);
void B_O(int);
void B_X(int);
void O_B(int);
void O_D(int);
void O_X(int);
void X_B(char r[],int k);
void X_D(char r[],int k);
void X_O(char r[],int k);
void main()
{
 int i,j,k=0;
 int q;
 char r[10];
 printf("+=============================================================+\n");
 printf("|                使                         |\n");
 printf("+=============================================================+\n");
 printf("  注 : 本 版 本 只 做 正 整 数 的 进 制 转 换 ! !");
 do
 {
  q=0;
  //fflush(stdin);
  printf("\n请选择需要被转换的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");
  scanf("%d",&i);
  switch (i)
  {
   case 1: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");
     scanf("%d",&j);
     switch(j)
     {
     case 1: printf("\n同进制之间不用转化!\n");
       q=1;
       break;
     case 2: printf("\n请输入您想要转化的数:");
       scanf("%d",&k);
       B_O(k);
       q=1;
       break;
     case 3: printf("\n请输入您想要转化的数:");
       scanf("%d",&k);
       B_D(k);
       q=1;
       break;
     case 4: printf("\n请输入您想要转化的数:");
       scanf("%d",&k);
       B_X(k);
       q=1;
       break;
     case 0:
      
       printf("谢谢使用!!");
      
     }
     break;
   case 2: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");
     scanf("%d",&j);
     switch(j)
     {
     case 2: printf("\n同进制之间不用转化!\n");
        q=1;
       break;
     case 1: printf("\n请输入您想要转化的数:");
       scanf("%d",&k);
       O_B(k);
       q=1;
       break;
     case 3: printf("\n请输入您想要转化的数:");
       scanf("%d",&k);
       O_D(k);
       q=1;
       break;
     case 4: printf("\n请输入您想要转化的数:");
       scanf("%d",&k);
       O_X(k);
       q=1;
       break;
     case 0:
       printf("谢谢使用!!");
     }
     break;
   case 3: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");
     scanf("%d",&j);
     switch(j)
     {
     case 3: printf("\n同进制之间不用转化!\n");
        q=1;
      
       break;
     case 1: printf("\n请输入您想要转化的数:");
       scanf("%d",&k);
       D_B(k);
       q=1;
       break;
     case 2: printf("\n请输入您想要转化的数:");
       scanf("%d",&k);
       D_O(k);
       q=1;
       break;
     case 4: printf("\n请输入您想要转化的数:");
       scanf("%d",&k);
       D_X(k);
       q=1;
       break;
     case 0:
      
       printf("谢谢使用!!");
     }
     break;
   case 4: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");
     scanf("%d",&j);
     switch(j)
     {
     case 4: printf("\n同进制之间不用转化!\n");
        q=1;
       break;
     case 1: printf("\n请输入您想要转化的数:");
        fflush(stdin);
        gets(r);
        for(k=0;;k++)
        {
         if(r[k]=='\0')
         break;
        }
      
       X_B(r,k);
       q=1;
       break;
     case 2: printf("\n请输入您想要转化的数:");
       fflush(stdin);
        gets(r);
        for(k=0;;k++)
        {
         if(r[k]=='\0')
         break;
        }
      
       X_O(r,k);
       q=1;
       break;
     case 3: printf("\n请输入您想要转化的数:");
       fflush(stdin);
        gets(r);
        for(k=0;;k++)
        {
         if(r[k]=='\0')
         break;
        }
       X_D(r,k);
       q=1;
       break;
     case 0:
      printf("谢谢使用!!");
      
     }
     break;
   case 0: printf("\n谢谢使用!\n");
   
  }
 }while(q==1);
}
 ///////以下为:  二进制转换为十进制,八进制,十六进制.
void B_D(int a)
{
 int i,s=0;
 int result=0;
 for(i=1;a!=0;i*=2)
 {
  if(a%10>1)
  {
   s=1;
   break;
  }
  else
  {
   result+=(a%10)*i;
   a=a/10;
  }
 }
 if(s==1)
  printf("您的输入有误!请重新输入\n");
 else
 printf("\n转换后的数为:%d\n",result);
}
 
void B_O(int a)
{
 int i,j,k,s=0;
 int p[30];
 int result=0;
 for(i=1;a!=0;i*=2)
 {
  if(a%10>1)
  {
   s=1;
   break;
  }
  else
  {
   result+=(a%10)*i;
   a=a/10;
  }
 }
 for(j=0;result!=0;j++)
 {
  p[j]=result%8;
  result=result/8;
 }
 if(s==1)
  printf("您的输入有误!请重新输入\n");
 else
 {
  printf("\n转换后的数为:");
  for(k=j-1;k>=0;k--)
  {
   printf("%d",p[k]);
  }
  printf("\n");
 }
}
 

void B_X(int a)
{
 int i,j,k,s=0;
 char p[30];
 int result=0;
 for(i=1;a!=0;i*=2)
 {
  if(a%10>1)
  {
   s=1;
   break;
  }
  else
  {
   result+=(a%10)*i;
   a=a/10;
  }
 }
 for(j=0;result!=0;j++)
 {
  p[j]=result%16;
  result=result/16;
  if (p[j]>10)
  {
   switch(p[j])
   {
   case 10: p[j]='A';
      break;
   case 11: p[j]='B';
      break;
   case 12:    p[j]='C';
      break;
   case 13:    p[j]='D';
      break;
   case 14:    p[j]='E';
      break;
   case 15:    p[j]='F';
      break;
   }
  }
  else p[j]+=48;
 }
 if(s==1)
  printf("您的输入有误!请重新输入\n");
 else
 {
  printf("\n转换后的数为:");
  for(k=j-1;k>=0;k--)
  {
   printf("%c",p[k]);
  }
  printf("\n");
 }
}
 ///////以下为:  八进制转换为二进制,十进制,十六进制.
void O_B(int a)
{
 int i,j,k,s=0;
 int result=0;
 int p[30];
 for(i=1;a!=0;i*=8)
 {if(a%10>7)
  {
   s=1;
   break;
  }
  else
  {
   result+=(a%10)*i;
   a=a/10;
  }
 }
 for(j=0;result!=0;j++)
 {
  p[j]=result%2;
  result=result/2;
 }
 if(s==1)
  printf("您的输入有误!请重新输入\n");
 else
 {
  printf("\n转换后的数为:");
  for(k=j-1;k>=0;k--)
  {
   printf("%d",p[k]);
  }
  printf("\n");
 }
}
 
void O_D(int a)
{
 int i,s=0;
 int result=0;
 for(i=1;a!=0;i*=8)
 {
  if(a%10>7)
  {
   s=1;
   break;
  }
  else
  {
   result+=(a%10)*i;
   a=a/10;
  }
 }
 if(s==1)
  printf("您的输入有误!请重新输入\n");
 else
 {
  printf("\n转换后的数为:%d\n",result);
 }
}
 
void O_X(int a)
{
 int i,j,k,s=0;
 char p[30];
 int result=0;
 for(i=1;a!=0;i*=8)
 {
  if(a%10>7)
  {
   s=1;
   break;
  }
  else
  {
   result+=(a%10)*i;
   a=a/10;
  }
 }
 for(j=0;result!=0;j++)
 {
  p[j]=result%16;
  result=result/16;
  if(p[j]<10)
   p[j]+=48;
  else
  {
   switch(p[j])
   {
   case 10: p[j]='A';
      break;
   case 11: p[j]='B';
      break;
   case 12:    p[j]='C';
      break;
   case 13:    p[j]='D';
      break;
   case 14:    p[j]='E';
      break;
   case 15:    p[j]='F';
      break;
   }
  }
 }
 if(s==1)
  printf("您的输入有误!请重新输入\n");
 else
 {
  printf("\n转换后的数为:");
  for(k=j-1;k>=0;k--)
  {
   printf("%c",p[k]);
  }
  printf("\n");
 }
}
 ///////以下为:  十六进制转换为十进制,二进制,八进制.
void X_D(char a[],int k)
{
 int i,j,s=0;
 int result=0;
 int b[50];
 for(i=0;i<k;i++)
 {
  if(a[i]<='9'&&a[i]>='1')
  { b[i]=a[i]-48;
     
  }
  else
  {
   switch(a[i])
   {
   case 'A': b[i]=10;
      break;
   case 'B': b[i]=11;
      break;
   case 'C':   b[i]=12;
      break;
   case 'D':   b[i]=13;
      break;
   case 'E':   b[i]=14;
      break;
   case 'F':   b[i]=15;
      break;
   case 'a': b[i]=10;
      break;
   case 'b': b[i]=11;
      break;
   case 'c':   b[i]=12;
      break;
   case 'd':   b[i]=13;
      break;
   case 'e':   b[i]=14;
      break;
   case 'f':   b[i]=15;
      break;
   default:  s=1;
      
   }
   
  }
 }
 for(i=1,j=k-1;j>=0;j--,i*=16)
 {
  result+=b[j]*i;
 }
 if(s==1)
  printf("您的输入有误!请重新输入\n");
 else
 {
  printf("\n转换后的数为:%d",result);
 }
}
 

void X_B(char a[],int k)
{
 int i,j,s=0;
 int result=0;
 int b[50];
 int p[30];
 for(i=0;i<k;i++)
 {
  if(a[i]<='9'&&a[i]>='1')
   b[i]=a[i]-48;
  else
  {
   switch(a[i])
   {
   case 'A': b[i]=10;
      break;
   case 'B': b[i]=11;
      break;
   case 'C':   b[i]=12;
      break;
   case 'D':   b[i]=13;
      break;
   case 'E':   b[i]=14;
      break;
   case 'F':   b[i]=15;
      break;
   case 'a': b[i]=10;
      break;
   case 'b': b[i]=11;
      break;
   case 'c':   b[i]=12;
      break;
   case 'd':   b[i]=13;
      break;
   case 'e':   b[i]=14;
      break;
   case 'f':   b[i]=15;
      break;
   default: s=1;
      
   }
  }
 }
 for(j=k-1,i=1;j>=0;j--,i*=16)
 {
  result+=b[j]*i;
 }
  for(j=0;result!=0;j++)
 {
  p[j]=result%2;
  result=result/2;
 }
 if(s==1)
  printf("您的输入有误!请重新输入\n");
 else
 {
  printf("\n转换后的数为:");
  for(k=j-1;k>=0;k--)
  {
   printf("%d",p[k]);
  }
  printf("\n");
 }
}
 
void X_O(char a[],int k)
{
 int i,j,s=0;
 int result=0;
 int b[30];
 int p[30];
 for(i=0;i<k;i++)
 {
  if(a[i]<='9'&&a[i]>='1')
   b[i]=a[i]-48;
  else
  {
   switch(a[i])
   {
   case 'A': b[i]=10;
      break;
   case 'B': b[i]=11;
      break;
   case 'C':   b[i]=12;
      break;
   case 'D':   b[i]=13;
      break;
   case 'E':   b[i]=14;
      break;
   case 'F':   b[i]=15;
      break;
   case 'a': b[i]=10;
      break;
   case 'b': b[i]=11;
      break;
   case 'c':   b[i]=12;
      break;
   case 'd':   b[i]=13;
      break;
   case 'e':   b[i]=14;
      break;
   case 'f':   b[i]=15;
      break;
   default: s=1;
   }
  }
 }
 for(j=k-1,i=1;j>=0;j--,i*=16)
 {
  result+=b[j]*i;
 }
  for(j=0;result!=0;j++)
 {
  p[j]=result%8;
  result=result/8;
 }
 if(s==1)
  printf("您的输入有误!请重新输入\n");
 else
 {
  printf("\n转换后的数为:");
  for(k=j-1;k>=0;k--)
  {
   printf("%d",p[k]);
  }
  printf("\n");
 }
}
///////以下为:  十进制转换为二进制,八进制,十六进制.
void D_B(int a)
{
 int j,k;
 int p[30];
 for(j=0;a!=0;j++)
 {
  p[j]=a%2;
  a=a/2;
 }
 printf("\n转换后的数为:");
 for(k=j-1;k>=0;k--)
 {
  printf("%d",p[k]);
 }
 printf("\n");
}
 
void D_O(int a)
{
 int j,k;
 int p[30];
 for(j=0;a!=0;j++)
 {
  p[j]=a%8;
  a=a/8;
 }
 printf("\n转换后的数为:");
 for(k=j-1;k>=0;k--)
 {
  printf("%d",p[k]);
 }
 printf("\n");
}

void D_X(int a)
{
 int j,k;
 int p[30];
 for(j=0;a!=0;j++)
 {
  p[j]=a%16;
  a=a/16;
  if(p[j]<10)
   p[j]+=48;
  else
  {
   switch(p[j])
   {
   case 10: p[j]='A';
      break;
   case 11: p[j]='B';
      break;
   case 12:    p[j]='C';
      break;
   case 13:    p[j]='D';
      break;
   case 14:    p[j]='E';
      break;
   case 15:    p[j]='F';
      break;
   }
  }
 }
 printf("\n转换后的数为:");
 for(k=j-1;k>=0;k--)
 {
  printf("%c",p[k]);
 }
 printf("\n");
}
   

 以上代码非个人所写。。。。谢谢合作

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-12 14:10
zhu_zhi
Rank: 2
来 自:广西百色
等 级:论坛游民
帖 子:129
专家分:92
注 册:2013-4-25
收藏
得分:0 
回复 2楼 so_love
天啊!这数值进制间转换代码也太繁杂了吧!是不是有点低效率。
2013-12-12 20:10
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:5 
回复 3楼 zhu_zhi
额。。。这个不是我写的。。。是别人写的。。。所有转换关系都有,。。能不能优化。。。我没细看。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-12 20:35
x906271196
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2013-11-25
收藏
得分:0 
回复 2楼 so_love
大神啊 能不能来个简单易懂的 我就一初学者啊  我怎么看得懂
2013-12-12 22:57
TmacLimt
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-12-10
收藏
得分:0 
#include<stdio.h>  
int main()  
{  
    char c[1000][1000];  
    int n,i,j,t=0;  
    scanf("%d",&n);  
    for(i=0;i<n;i++)  
        scanf("%s",&c[i]);  
    for(i=0;i<n;i++)  
    {  
        j=0;  
        while(c[i][j]=='1'||c[i][j]=='0')  
        {  
            if(c[i][j]=='1')  
                t=2*t+1;  
            else  
                t=2*t;  
            j++;  
        }  
        printf("%o\n",t);  
        t=0;  
    }  
    return 0;  
}

我们以前写过,这个是输入n个,计算出它的八进制

2013-12-12 23:32
kadysent
Rank: 1
等 级:新手上路
帖 子:3
专家分:8
注 册:2013-7-19
收藏
得分:5 
#include <stdio.h>
int main(){
    char n[32];
   
    while (gets(n) && *n != 0 && *n != '\n'){
        int s=0;
        int i;
        for (i=0; n[i]; i++)
            s=2*s+n[i]-'0';
        printf("%o\n", s);
    }
        return 0;
}
2013-12-12 23:37
kadysent
Rank: 1
等 级:新手上路
帖 子:3
专家分:8
注 册:2013-7-19
收藏
得分:0 
就是先把读入的字符串转成int,再用八进制输出
2013-12-12 23:39
ma_gician
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-12-10
收藏
得分:0 
思路是先把二进制的书转化成十进制的数,然后再把十进制的数转化成八进制。
2013-12-13 01:04
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:0 
这个你可以自己看看嘛。。。然后找到你要的那部分不就行了?
void B_O(int a)

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-13 09:37
快速回复:二进制转八进制怎么编?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046640 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved