其实进制转换用其他的可能更方便一点,但主要是堆栈的应用。
代码如下:(希望大家来优化一下)
/*
堆栈的应用---进制转换
将十进制转换成其他进制
*/
#include <stdio.h>
#define maxlen 100
typedef struct //堆栈的结构大家应该都很熟悉了
{
int data[maxlen];
int top;
}SeqStack;
void InitStack(SeqStack * S) //置栈空
{
S->top = -1;
}
void Pop(SeqStack * S, int * x) //出栈,x用来接受被弹出的数的
{
*x = S->data[S->top];
S->top--;
}
void Push(SeqStack * S, int x) //入栈
{
S->top++;
S->data[S->top] = x;
}
void Conversion(SeqStack * S, int n, int d) //n为一个十进制数,d为进制
{
if(d < 0)
printf("ERROR!\n");
if(n < 0)
n = -n;
if(n == 0)
Push(S, 0);
while(n)
{
Push(S, n%d);
n /= d;
}
}
int main()
{
int n,d,x; //n为一个十进制数,d为进制
SeqStack stack, *S;
S = &stack;
while(scanf("%d %d",&n,&d) != EOF)
{
InitStack(S); //初始化
Conversion(S, n, d);
if(n < 0)
printf("%c",'-'); //若是负数
while(S->top != -1)
{
Pop(S, &x);
if(x < 10)
printf("%d",x);
else
printf("%c",x + 55); //使输出的时候大于9的输出为字母ABC
}
printf("\n");
}
return 0;
}