回 帖 发 新 帖 刷新版面

主题:进制数之间的转换

如何利用栈来实现从十进制到十六进制的转换?
有没有通用的,也可以利用到同类的比如二进制到十进制,或者……只要是同类间的转换,都可以用通用的程序替代,只需改点

回复列表 (共3个回复)

沙发

你在学数据结构的栈的这一章吧.转化何必非得要用栈呢?我这有一个程序,你参考参考:

#include<stdio.h>
#include<math.h>

//#define DE 0

#ifdef DE
int changToD (char *,int ); //这个函数用以把所求的N进制数转为十进制数看结果是否正确
#endif

int main()
{
    char a[20]={0},t; 
    int i,j,n,m,len;

    puts("Enter the number:");
    scanf("%d",&m);
    n=m;
    printf("1进制数是:  ");
    while(n--)
        printf("%c",'1');
    printf("   Yes!");
    for(n=2;n<=16;++n){
        for(j=0;j<20;j++)
            a[j]=0;
        for(i=0,j=0;m>=(int)pow(n,j);j++)
            a[i++]=m/((int)pow(n,j))%n+48;  
        for(j=0;a[j];++j) //如果大于了9,那就得变成A,B,C了
            if(a[j]>57)
                a[j]+=7;

        len=strlen(a);
        for(j=len/2-1;j>=0;--j){  //将a字符串首尾倒置过来
            t=a[j];
            a[j]=a[len-j-1];
            a[len-j-1]=t;
        }
        printf("\n%d进制数是:  %s",n,a);

#ifdef DE
        if(m==changToD(a,n))
            printf("   Yes!");
#endif
    }

    puts("");
    system("pause");
    return 0;
}

#ifdef DE
int changToD (char *a,int N)
{
    int i,len,result=0;

    for(i=0;a[i];++i) //如果大于了9,那就得还完了
            if(a[i]>57)
                a[i]-=7;
    len=strlen(a);
    for(i=0;i<len;++i)
        result+=((a[i]-48)*(int)pow(N,len-i-1));  //double类型的数的乘法运算总让人不大放心,毕竟后面跟着那么多的零

    return result;
}
#endif

板凳

这样吗?
不是说用栈的话,会更加简单吗?
寻求一程序用栈来解释一切啊!!
呵呵

3 楼

这是用栈编的十进制与八进制的转换  你变一下就行了



#include<stdio.h>
#include<malloc.h>
#include<process.h>
#define  TURE  1
#define  FALSE  0
#define  OK    1
#define  ERROR  0
#define  OVERFLOW  -2
#define  STACK_INIT_SIZE   100
#define  STAKINCRIMENT  10
typedef   int  StackData;
typedef   int  status;
typedef struct{
 StackData  *base;
 StackData  *top;
 int stacksize;
}SqStack;
status InitStack(SqStack &S)
{   
    S.base=(StackData*)malloc(STACK_INIT_SIZE*sizeof(StackData));
 if(!S.base)
  exit(OVERFLOW);
 S.top=S.base;
 S.stacksize=STACK_INIT_SIZE;
 return  OK;
}
status push(SqStack &S,StackData x)
{
 
 *(S.top)=x;
    (S.top)++;
 return  OK;
}
status pop(SqStack &S,StackData &e)
{
 
 if(S.top==S.base)
  return ERROR;
 --S.top;
 e=*S.top;
 return  OK;
}
void main()
{
 SqStack S;int N;
 InitStack(S);
 printf("input a digit");
 scanf("%d",&N);
 while(N){
  push(S,N%8);
  N=N/8;
 }
 while(!(S.top==S.base))
 {
  StackData e;
 
  pop(S,e);
  printf("%d",e);
 }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册