一.问题:将一个十进制整数转换为十六进制整数
进制转化经常用到除整取余数的方法
1.设置一个顺序栈
typedef struct
{
int data[maxsize];
int top;
}sqstack;
2.初始化栈
让栈顶指针指向空
void Initstack(sqstack*s)
{(*s).top=-1;
}
3.判空操作
int Emptystack(sqstack s)
{
if(s.top ==maxsize-1)
return 0;//栈满
return 1;//栈空
}
4.进栈操作
void Pushstack(sqstack *s,int x)//进栈
{ (*s).data[++((*s).top)]=x;
return ;
}
5.出栈操作
void Popstack(sqstack *s,int *x)//出栈
{
*x=(*s).data[((*s).top)--];
return ;
}
6.主函数
int main() {
sqstack s;
Initstack(&s);
int a,i;
scanf("%d",&a);
if(a<0||a>1000000)
printf("Input error");
return 0;
while(a)
{Pushstack(&s,a%16);
a/=16;
i++;
}
int j,x;
for(j=0;j<i;j++)
{Popstack(&s,&x);
if(x>9)
{char a='A';
a='A'+(x-10);
printf("%c",a);
}
else
printf("%d",x);
}
return 0;
}
7.整体代码
#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
typedef struct
{
int data[maxsize];
int top;
}sqstack;
void Initstack(sqstack*s)
{(*s).top=-1;
}
int Emptystack(sqstack s)
{
if(s.top ==maxsize-1)
return 0;//栈满
return 1;//栈空
}
void Pushstack(sqstack *s,int x)
{ (*s).data[++((*s).top)]=x;
return ;
}
void Popstack(sqstack *s,int *x)
{
*x=(*s).data[((*s).top)--];
return ;
}
int main() {
sqstack s;
Initstack(&s);
int a,i;
scanf("%d",&a);
if(a<0||a>1000000)
printf("Input error");
return 0;
while(a)
{Pushstack(&s,a%16);
a/=16;
i++;
}
int j,x;
for(j=0;j<i;j++)
{Popstack(&s,&x);
if(x>9)
{char a='A';
a='A'+(x-10);
printf("%c",a);
}
else
printf("%d",x);
}
return 0;
}