设计一个程序可以将十进制、二进制、八进制、十六进制数之间相互转换。 用C 数据结构做,谢谢!

2024-12-04 13:03:43
推荐回答(2个)
回答1:

/* 十进制到任意进制的转换 */
#include
#include
void main()
{
int p(int x,int y);
int a,x,i,c;
char cc;
printf("要转换的进制为:\n");
scanf("%d", &a);
printf("请输入一个十进制数:\n");
scanf("%d", &x);
for(i=1;;i++)
if(x/(int)pow(a,i)==0) break; //找出最大的 a 进制权值
printf("相应的%d进制数为:\n", a);
for(;i>0;i--)
{
c=x%(int)pow(a,i)/(int)pow(a,i-1); // 核心语句 此处若强制类型转换
if(c<10) printf("%d", c); // 从高到低输出 a 进制的各位权值的相应数字
else
{
cc=(char)(c+55);
printf("%c", cc);
}
}
printf("\n");
}

回答2:

下面的代码实现十进制数向任意进制转换,希望对你有所帮助!
#include
#include
#include
#define MaxSize 100
#define NULL 0

typedef struct
{
int data[MaxSize];
int top;
}SeqStack;

SeqStack *InitStack(void) /*初始化栈*/
{
SeqStack *s;
s=(SeqStack *)malloc(sizeof(SeqStack));
if(!s)
{
printf("空间不足!");
return 0;
}
else
{
s->top=-1;
return s;
}
}

int IsEmpty(SeqStack *s) /*判断栈是否为空*/
{
if(s->top==-1) return 1;
else return 0;
}

int IsFull(SeqStack *s) /*判断栈是否为满*/
{
return(s->top==MaxSize-1);
}

void Push(SeqStack *s,int n,int r) /*入栈*/
{
while(n!=0)
{
if(!IsFull(s))
{
s->top++;
s->data[s->top]=n%r;
n=n/r;
}
else
{
printf("栈满");
return;
}
}
}

void Pop(SeqStack *s) /*出栈*/
{
while(!IsEmpty(s))
{
if(s->top!=-1)
{
if(s->data[s->top]<10) printf("%d",s->data[s->top]);
else printf("%c",'A'+s->data[s->top]-10);
s->top--;
}
else
{
printf("栈空");
return;
}
}
}

int main(int argc,char *argv[])
{
int n,r;
SeqStack *s;
s=InitStack();
printf("请输入一个十进制数和要转换的进制数(二进制,八进制等),用逗号隔开:");
scanf("%d,%d",&n,&r);
Push(s,n,r),Pop(s);
getch();
return 0;
}