| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 14442 人关注过本帖, 1 人收藏
标题:十进制转二进制、八进制、十六进制的经典程序
只看楼主 加入收藏
yelusu
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-4-15
收藏(1)
 问题点数:0 回复次数:9 
十进制转二进制、八进制、十六进制的经典程序
程序代码:(刚整理出来)
#include <iostream.h>

//十进制数转换成二进制数字
void fun_1(int n)
{
   if(n<2)   
       cout<<n;
   if(n>=2)  
   {
     fun_1(n/2);
     cout<<n%2;
   }
}

//十进制数字转换成八进制数字
void fun_2(int n)
{
  if(n<8)   
      cout<<n;
  if(n>=8)  
  {
    fun_2(n/8);
    cout<<n%8;
  }
}

//十进制数转换成十六进制数字
void fun_3(int n)
{
  switch(n)
  {
     case 10:   cout<<"A"; break;
     case 11:   cout<<"B"; break;
     case 12:   cout<<"C"; break;
     case 13:   cout<<"D"; break;
     case 14:   cout<<"E"; break;
     case 15:   cout<<"F"; break;
     default:   cout<<n;   
  }
}     

void fun_4(int n)
{
   if(n<16)   
       fun_3(n);
   if(n>=16)  
   {
     fun_4(n/16);
     fun_3(n%16);
   }
}

//主函数
void main()
{
    int n;
    cout<<"请输入n的值:  "<<endl;
    cin>>n;
    cout<<"十进制数字转换成二进制,八进制,十六进制数字结果如下:"<<endl;
    fun_1(n);        
    cout<<endl;      //输出结果换行
    fun_2(n);        
    cout<<endl;      
    fun_4(n);      
    cout<<endl;   
}

输出结果:
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 八进制 二进制 十六进制 十进制 经典 
2008-04-22 22:46
momogxx
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-10-16
收藏
得分:0 
学习一下
2008-10-16 20:50
ec_月月
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-10-8
收藏
得分:0 
不错,我也有一个和大家分享下。可以从十进制转换成2至16进制。不过用处不大了
#include<iostream.h>
#include<string.h>
#include<ctype.h>
#include<malloc.h> /* malloc()等 */
#include<limits.h> /* INT_MAX等 */
#include<stdio.h> /* EOF(=^Z或F6),NULL */
#include<stdlib.h>
#include<process.h> /* exit() */

#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;

typedef int Status;
typedef int SElemType;
typedef int Boolean;


typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;  // 栈是由栈底指针和栈顶指针以及栈的容量组成。top-1便是栈的长度

Status InitStack(SqStack &S)
{
    S.base = (SElemType *)malloc(100 * sizeof(SElemType));
    if(!S.base) exit(OVERFLOW);
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return OK;
}

Status PushStack(SqStack &S, SElemType e)
{
    if(S.top - S.base >= S.stacksize)
    {
        S.base = (SElemType *)realloc(S.base,(S.stacksize+10) * sizeof(SElemType));
        if(!S.base)  exit(OVERFLOW);
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++ = e;
    return OK;
}

Status PopStack(SqStack &S, SElemType &e)
{
    if(S.top == S.base) return ERROR;
     e = * --S.top;
     return OK;
}

Status StackEmpty(SqStack S)
{
    if(S.top == S.base)
        return TURE;
    else  return FALSE;
    return OK;
}

void conversion(int N,int r)
{
    SqStack S;
    SElemType e;
    InitStack(S);
    if(N<0)
    {
        cout<<"您输入的数据不在范围之内!";
        cout<<endl;
        return;
    }
    /*if(!N)
        PushStack(S,0);*/
    while(N)
    {
        PushStack(S,N%r);
        N = N/r;
    }
    while(!StackEmpty(S))
    {
        PopStack(S,e);
        if(e<=9)
            cout<<e;
        else
            cout<<char(e+55);
    }
    cout<<endl;
}

void main()
{
    int N,r;
    do
    {
    cout<<"请输入任意一个整数:   ";
            cin>>N;
            cout<<endl;
    cout<<"请输入要转换的进制:  ";
            cin>>r;
            cout<<endl;
    cout<<"转换数据为:";
        conversion(N,r);
        system("cls");
    }while(N);
}
2008-10-17 15:04
emzeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-10-15
收藏
得分:0 
void fun_1(int n)
{
   if(n<2)   
       cout<<n;
   if(n>=2)  
   {
     fun_1(n/2);
     cout<<n%2;
   }
}
有个疑问
例如  32转2进制的话,他进入fun1()里。为什么它会100000这么输出,而不是000001这么输出呢???
2008-10-17 16:44
sweetyhappy
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-10-16
收藏
得分:0 
因为先执行fun_1(n/2),知道n<2时,即输出1,而后再执行n>=2;
fun_1(n/2);cout<<n%2;两句颠倒一下就是000001
2008-10-17 19:26
唐僧
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-10-9
收藏
得分:0 
上面用递归好像空间开销比较大。后面利用堆栈想法我很佩服,但进栈函数有点看不懂!
2008-10-17 19:35
choco1024
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:183
专家分:140
注 册:2008-8-31
收藏
得分:0 
以下是用栈的思想,但是用一维数组写的。
#include <stdio.h>
#define L 20
void Converse(int n,int base)
{
    int s[L],x,top;   
    top=-1;
    while(n)
    {
        s[++top]=n%base;
        n=n/base;
    }
    while(top!=-1)
    {
        x=s[top--];
        printf("%d",x);
    }
}
void main()
{
    int n,base;
    printf("请输入需要转换的数值:\n");
    scanf("%d",&n);
    printf("请输入转换的进制:\n");
    scanf("%d",&base);
    Converse(n,base);
}
2008-10-17 20:58
emzeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-10-15
收藏
得分:0 
谢谢sweetyhappy
2008-10-19 20:07
tuo2000912
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-4-4
收藏
得分:0 
我的程序和你们一定不一样:
#include <stdio.h>
#include <string.h>
#define string char*
int main(){
    int n,l; string m;
    const string b={"0000101001101111000"},h={"ABCHFDILPGEKOJNM"};
    string p={""};
    scanf("%d",&n);
    l=n;
    for(;l!=0;){
        strcpy(p,strcat(mid(b,(int)(mid(h,d%16+1,1))-64,4),b);
        d/=16;
    }
    printf("%s\n",p);
    return 0;
}
mid函数的实现未给出,其作用为:char *mid(char* a,int b,int c);
取第一个字符串a的第b位起c个字符。

[ 本帖最后由 tuo2000912 于 2012-7-18 08:52 编辑 ]
2012-07-18 08:24
快速回复:十进制转二进制、八进制、十六进制的经典程序
数据加载中...
 
   



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

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