找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 438|回复: 3

十进制转二进制、八进制、十六进制的经典程序

[复制链接]
发表于 2009-11-6 00:49:50 | 显示全部楼层 |阅读模式 IP:江苏扬州
程序代码:(刚整理出来)
#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;   
}

输出结果:
附件: 只有本站会员才能下载或查看附件,请您 登录 或 注册
发表于 2009-11-6 00:49:51 | 显示全部楼层 IP:江苏扬州
学习一下
回复

使用道具 举报

发表于 2009-11-6 00:49:52 | 显示全部楼层 IP:江苏扬州
不错,我也有一个和大家分享下。可以从十进制转换成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);
}
回复

使用道具 举报

发表于 2009-11-6 00:49:53 | 显示全部楼层 IP:江苏扬州
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这么输出呢???
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 15:25 , Processed in 0.209372 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表