#2
azzbcc2014-05-17 01:50
|
程序代码:
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
#define STACK_INIT_SIZE 1000
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;//栈的顺序存储表示
int N;//定义全局变量N,表示将要转换为R进制的十进制数
int R;//定义全局变量R,表示进制数R
int InitStack(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 OK;
}//栈的初始化
int StackEmpty(SqStack &S)
{
if(S.top==S.base) return TRUE;
else return FALSE;
}//判断栈是否为空
int Push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//进栈操作
int Pop(SqStack &S,int &e)
{if(S.top==S.base)return ERROR;
e=*--S.top ;
return OK;
}//出栈操作
void conversion(SqStack &S,int R,int N,int &e)
{
InitStack(S);
while(N)
{
Push(S,N%R);
N=N/R;
}
while(!StackEmpty(S))//??
{
Pop(S,e);//??
if(e<10)
{
printf("%d",e);
}
else
{ e=e+55;
printf("%c\n",e);
}
}
printf("\n");
}//数制转换函数
int Ninputlegality()
{
char str1[100];//数组str存放输入的字符,以便判断输入是否有误
int i;
gets(str1);//??
for(i=0;str1[i]!='\0';i++)
{if((str1[i]>57)||(str1[i]<48))
{ return(0); break; }
else
{
N=atoi(str1);//输入无误时,字符数组转换为十进制数N
return(1);
}
}
}//判断十进制数N输入是否合法
int Rinputlegality()
{
char str2[100];
int i;
gets(str2);
for(i=0;str2[i]!='\0';i++)
{
if((str2[i]>57)||(str2[i]<48))
{
return(0);
break;
}
else
{ R=atoi(str2);//输入无误时,字符数组转换为进制数R
return(1);
}
}
}//判断进制数r输入是否合法
void main()
{
int e,p,q;
SqStack S;
m:printf("请输入十进制整数N:");
p=Ninputlegality();
if(p==0)
{
printf("输入有误\n");
goto m;
}//保证输入数据合法
n:printf("请输入将要转换为的进制数R:");
q=Rinputlegality();
if(q==0)
{
printf("输入有误\n");
goto n;
}//保证输入数据合法
printf("%d由十进制转换为%d进制数为:",N,R);
conversion(S,R,N,e);
}//主函数
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
#define STACK_INIT_SIZE 1000
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;//栈的顺序存储表示
int N;//定义全局变量N,表示将要转换为R进制的十进制数
int R;//定义全局变量R,表示进制数R
int InitStack(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 OK;
}//栈的初始化
int StackEmpty(SqStack &S)
{
if(S.top==S.base) return TRUE;
else return FALSE;
}//判断栈是否为空
int Push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//进栈操作
int Pop(SqStack &S,int &e)
{if(S.top==S.base)return ERROR;
e=*--S.top ;
return OK;
}//出栈操作
void conversion(SqStack &S,int R,int N,int &e)
{
InitStack(S);
while(N)
{
Push(S,N%R);
N=N/R;
}
while(!StackEmpty(S))//??
{
Pop(S,e);//??
if(e<10)
{
printf("%d",e);
}
else
{ e=e+55;
printf("%c\n",e);
}
}
printf("\n");
}//数制转换函数
int Ninputlegality()
{
char str1[100];//数组str存放输入的字符,以便判断输入是否有误
int i;
gets(str1);//??
for(i=0;str1[i]!='\0';i++)
{if((str1[i]>57)||(str1[i]<48))
{ return(0); break; }
else
{
N=atoi(str1);//输入无误时,字符数组转换为十进制数N
return(1);
}
}
}//判断十进制数N输入是否合法
int Rinputlegality()
{
char str2[100];
int i;
gets(str2);
for(i=0;str2[i]!='\0';i++)
{
if((str2[i]>57)||(str2[i]<48))
{
return(0);
break;
}
else
{ R=atoi(str2);//输入无误时,字符数组转换为进制数R
return(1);
}
}
}//判断进制数r输入是否合法
void main()
{
int e,p,q;
SqStack S;
m:printf("请输入十进制整数N:");
p=Ninputlegality();
if(p==0)
{
printf("输入有误\n");
goto m;
}//保证输入数据合法
n:printf("请输入将要转换为的进制数R:");
q=Rinputlegality();
if(q==0)
{
printf("输入有误\n");
goto n;
}//保证输入数据合法
printf("%d由十进制转换为%d进制数为:",N,R);
conversion(S,R,N,e);
}//主函数
[ 本帖最后由 longxingxiu 于 2014-5-17 00:48 编辑 ]