主题:进制数之间的转换
moriliefeng
[专家分:30] 发布于 2006-11-07 01:16:00
如何利用栈来实现从十进制到十六进制的转换?
有没有通用的,也可以利用到同类的比如二进制到十进制,或者……只要是同类间的转换,都可以用通用的程序替代,只需改点
回复列表 (共3个回复)
沙发
freeeerf [专家分:5440] 发布于 2006-11-07 08:49:00
你在学数据结构的栈的这一章吧.转化何必非得要用栈呢?我这有一个程序,你参考参考:
#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
板凳
moriliefeng [专家分:30] 发布于 2006-11-08 17:05:00
这样吗?
不是说用栈的话,会更加简单吗?
寻求一程序用栈来解释一切啊!!
呵呵
3 楼
wsytju0703 [专家分:20] 发布于 2006-11-27 22:56:00
这是用栈编的十进制与八进制的转换 你变一下就行了
#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);
}
}
我来回复