창고의 응용 ---10진수를 다른 진수로 변환


  
  
  
  
  1. //  .cpp : Defines the entry point for the console application.  
  2. //  
  3.  
  4. #include "stdafx.h"  
  5. #include <stdio.h>  
  6. #include <stdlib.h>  
  7. #define OK 1  
  8. #define ERROR 0  
  9. #define OVERFLOW -2  
  10. #define LISTINCREMENT 10  
  11. #define INFEASIBLE -1  
  12. #define STACK_INIT_SIZE 100  
  13. #define STACKINCREMENT 10  
  14. typedef int SElemType;  
  15. typedef int Status;  
  16. typedef int ElemType;  
  17. typedef struct SqStack  
  18. {  
  19.  SElemType *base;  
  20.  SElemType *top;  
  21.  int stacksize;  
  22. }SqStack;  
  23.  
  24. Status InitStack(SqStack &S);  
  25. Status Push(SqStack &S,SElemType e);  
  26. Status Pop(SqStack &S,SElemType &e);  
  27. Status StackEmpty(SqStack S);  
  28. void convert(int e);  
  29. void CONVERT(int integer,int N);  
  30.  
  31. int _tmain(int argc, _TCHAR* argv[])  
  32. {  
  33.     int n;  
  34.     printf(" :");  
  35.     scanf("%d",&n);  
  36.     CONVERT(n,2);  
  37.     scanf("%d",&n);  
  38.     return 0;  
  39. }  
  40.  
  41.  
  42. void CONVERT(int integer,int N)  
  43. {     
  44.     SqStack S;  
  45.     InitStack(S);  
  46.     int e;  
  47.     while(integer)  
  48.     {  
  49.       Push(S,integer % N);  
  50.       integer = integer/N;  
  51.     }  
  52.     printf(" %d :",N);  
  53.     while(!StackEmpty(S))  
  54.     {  
  55.       Pop(S,e);  
  56.       convert(e);  
  57.     }  
  58. }  
  59.        
  60. void convert(int e)  
  61. {  
  62.  if(e==0)  
  63.   printf("0");  
  64.  if(e==1)  
  65.   printf("1");  
  66.  if(e==2)  
  67.   printf("2");  
  68.  if(e==3)  
  69.   printf("3");  
  70.  if(e==4)  
  71.   printf("4");  
  72.  if(e==5)  
  73.   printf("5");  
  74.  if(e==6)  
  75.   printf("6");  
  76.  if(e==7)  
  77.   printf("7");  
  78.  if(e==8)  
  79.   printf("8");  
  80.  if(e==9)  
  81.   printf("9");  
  82.  if(e==10)  
  83.   printf("A");  
  84.  if(e==11)  
  85.   printf("B");  
  86.  if(e==12)  
  87.   printf("C");  
  88.  if(e==13)  
  89.   printf("D");  
  90.  if(e==14)  
  91.   printf("E");  
  92.  if(e==15)  
  93.   printf("F");  
  94. }   
  95.     
  96. Status InitStack(SqStack &S)  
  97. {  
  98.  S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));  
  99.  if(!S.base)  
  100.   exit(OVERFLOW);  
  101.  S.top = S.base;  
  102.  S.stacksize=STACK_INIT_SIZE;  
  103.  return OK;  
  104. }  
  105.  
  106. Status Pop(SqStack &S,SElemType &e)  
  107. {  
  108.  if(S.top == S.base)  
  109.   return ERROR;  
  110.   e = *--S.top;  
  111.  return OK;  
  112. }  
  113.  
  114.  
  115. Status Push(SqStack &S,SElemType e)  
  116. {  
  117.  if(S.top - S.base >= S.stacksize)  
  118.  {  
  119.   S.base = (ElemType *)realloc(S.base,(S.stacksize + LISTINCREMENT) * sizeof(ElemType));  
  120.   if(!S.base)  
  121.    exit(OVERFLOW);  
  122.   S.top = S.base + S.stacksize;  
  123.   S.stacksize += STACKINCREMENT;  
  124.   }  
  125.  *S.top++ = e;  
  126.   return OK;  
  127. }  
  128.  
  129. Status StackEmpty(SqStack S)  
  130. {  
  131.  if(S.top == S.base)  
  132.   return OK;  
  133.  else 
  134.  return ERROR;  
  135. }  

좋은 웹페이지 즐겨찾기