栈---十进制转化为任意制
来源:互联网 发布:html源码metro 编辑:程序博客网 时间:2024/05/18 15:30
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define SIZE_INCREMENT 5
typedef struct //栈结构
{
int *base; //栈底
int *top; //栈顶
int stacksize; //栈大小
}SqStack,*SQSTACK;
int StackInit(SQSTACK s) //初始化栈
{
s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!(s->base))
exit(0);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return 1;
}
int PUSH(SQSTACK s,int e) //入栈
{
if(s->base+s->stacksize==s->top)
{
s->base=(int *)realloc(s->base,(SIZE_INCREMENT+s->stacksize)*sizeof(int));
s->top=s->base+s->stacksize;
s->stacksize+=SIZE_INCREMENT;
}
*(s->top)=e;
s->top+=1;
return 1;
}
int POP(SQSTACK s,int *p) //出栈
{
if(s->base==s->top) //空栈
return 0;
*p=*(s->top-1);
s->top--;
return 1;
}
int StackLength(SQSTACK s) //栈的长度(元素数量)
{
return (s->top-s->base);
}
int StackFree(SQSTACK s) //释放栈
{
free(s->base);
s->top=s->base=NULL;
return 1;
}
char *DecToOther(unsigned long num,int sys) //10进制转换为其他进制,返回一个字符串
{//num需转换的数据,sys为需转换的进制
SqStack s;
int rem,i,length,num1,inc=1;
char *out,*p; //控制输出字符串
if(!StackInit(&s)) //初始化栈失败
exit(0);//退出
do{
if(num<sys) //被除数小于进制
{
rem=num;
PUSH(&s,rem); //进接将被除数入栈
break;//退出循环
}
else
{
rem=num % sys; //除进制数取余数
PUSH(&s,rem); //将余数入栈
num=(num-rem)/sys; //商
}
}while(num); //dividend不为0
if(sys==16) //16进制有两个字符的前缀 +
inc++;
length=StackLength(&s); //获取栈的长度(需输出元素的个数)
if(!(out=(char *)malloc(sizeof(char)*(length+inc))))//若分配内存失败
{
printf("内存分配失败!\n");
exit(0);
}
p=out; //指针p指向分配内存首地址
*p++='0';//添加前缀
if(sys==16) //16进制的前缀
*p++='x';
for(i=1;i<=length;i++)
{
POP(&s,&num1); //从栈中弹出一个数
if(num1<10) //若小于10
*p++=num1+'0'; //保存数字的ASCII字符
else //大于10,输出A~F
*p++=num1+'A'-10;//输出A~F之间的字母
}
StackFree(&s); //释放栈所占用空间
*p='\0';
return (out);//返回字符串
}
int main()
{
int new1;
char select='N',*other,str[80]; //符号
unsigned long num10; //保存10进制数
char array[32];
do{
printf("输入10进制数:");
scanf("%d",&num10); //保存字符串
printf("需转换的进制:");
scanf("%d",&new1);
other=DecToOther(num10,new1);
printf("将 10进制数 %d 转换为 %d进制数:%s\n",num10,new1,other);
printf("\n继续(Y/N)?");
select=getch();
}while(select=='y' || select =='Y');
getch();
return 0;
}
- 栈---十进制转化为任意制
- 任意进制转化为十进制
- 十进制数转化为任意进制
- 十进制转化为任意进制的数
- 十进制数转化为任意进制数
- 将十进制转化为任意进制的程序(今天写的)
- 递归 将一个十进制数转化为任意进制字符串
- 你猜是什么??? 十进制转化为任意进制咩咩咩!!!
- 任意255以内的十进制数转化为16进制数
- 实验C—5 任意十进制数转化为二进制
- 十进制转换为任意进制(栈 c++版)
- 十进制转换为任意进制
- 任意进制转换为十进制
- C++十进制转换为任意进制
- 进制转换 十进制转化为八进制 通过栈实现
- 第十二周OJ——十进制转化任意进制
- 利用递归调用实现十进制转化成任意进制
- 十进制转化为16进制以下
- html页面特效代码大全
- 剖析 Rails 3 MVC 中的数据传递
- Graphviz Style
- U-Boot的常用命令详解
- android 页面停几秒后跳转
- 栈---十进制转化为任意制
- POJ 2993 Emag eht htiw Em Pleh解题报告
- java synchronized 使用方法详解
- HDU 1030 Delta-wave
- ios gb2312转utf-8
- hdu 1215 七夕节
- hdu 2090 算菜价
- js 取DropDownList选中的值
- kingdee bos开发特殊数据权限配置