用栈方式实现十进制转十六进制:
- #include <stdio.h>
- #define SIZE 30
- typedef struct tag_stack
- {
- char *top;
- char *base;
- int s_length;
- int s_size;
- }*pStack;
- pStack initStack(void)
- {
- pStack S = NULL;
- S = (pStack)malloc(sizeof(struct tag_stack));
- S->base = (char *)malloc(SIZE);
- S->top = S->base;
- S->s_length = 0;
- S->s_size = SIZE;
- return S;
- }
- void push(pStack S,char elem)
- {
- *S->top++ = elem;
- S->s_length++;
- }
- char pop(pStack S)
- {
- S->s_length--;
- return *(--S->top);
- }
- char mod_16(int x,int moder)
- {
- int y = x%moder;
- switch(y)
- {
- case 10:
- return 'A';
- case 11:
- return 'B';
- case 12:
- return 'C';
- case 13:
- return 'D';
- case 14:
- return 'E';
- case 15:
- return 'F';
- default:
- return y+'0';
- }
- }
- void to_16(int num,int moder)
- {
- pStack statck_16 = initStack();
- if( statck_16 == NULL || statck_16->base == NULL)
- {
- printf("error/n");
- return;
- }
- while(num)
- {
- char c;
- c = mod_16(num,moder);
- push(statck_16,c);
- num/=moder;
- }
- push(statck_16,'x');push(statck_16,'0');
- while(statck_16->top != statck_16->base)
- {
- printf("%c",pop(statck_16));
- }
- printf("/n");
- free(statck_16->base);
- free(statck_16);
- statck_16 = NULL;
- }
- int main(void)
- {
- int num = 0;
- printf("请输入要进行转化的数: ");
- scanf("%d",&num);
- to_16(num,16);
- return 0;
- }