디지털 변환 (C 언어 구현)
#include<stdio.h>
#include<stdlib.h>
typedef int SElemType ;
unsigned n;//
int N;
#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define STACKINCREMENT 1
#define STACK_INIT_SIZE 10
typedef int Status;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//
Status InitStack(SqStack &S)
{
//
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)
return ERROR;//
S.top=S.base;//
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status StackEmpty(SqStack S)
{
// S ( ), OK, ERROR
if(S.top==S.base)
return OK;
else
return ERROR;
}
Status Push(SqStack &S,SElemType e)
{
// e
if(S.top-S.base>=S.stacksize)// ,
{
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
return ERROR;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;// ++* , ,
return OK;
}
Status GetTop(SqStack S,SElemType *e)
{
if(S.base<S.top)
{
*e=*(S.top-1);
return OK;
}
else return ERROR;
}
Status Pop(SqStack &S,SElemType &b)
{
// , S , e , OK, ERROR
if(S.top==S.base)
return ERROR;
b = * --S.top;// --* , ,
return OK;
}
Status StackTraverse(SqStack S,int(*visit)(SElemType))
{
while(S.top>S.base)
{
visit(*S.base);
S.base++;
}
printf("
");
return OK;
}
Status visit(SElemType c)
{
printf("%d", c);
return OK;
}
void conversion()
{
// , N
SqStack s;
SElemType e;
InitStack(s);//
while(n)// n 0
{
Push(s,n%N);// n N (N )
n=n/N;
}
printf(" :");
while(!StackEmpty(s))
{
Pop(s,e);// e
printf("%d",e);
}
printf("
");
}
void main()
{
int y;
char c;
printf(" 1. n
2. m
3.
4. ?(y/n?)
");
while(1)
{
printf(" 1-4
");
scanf("%d",&y);
if(y==1)
{
printf("
");
scanf("%d", &n);
}else
if(y==2)
{
printf("
");
scanf("%d", &N);
}else
if(y==3)
{
printf("
");
conversion();
}else
if(y==4)
{
printf(" y or Y to continue or n or N to quit
");
scanf("%c",&c);
if(c == 'n' || c == 'N')
break;
}
else
{
printf("
");
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.