开开心心学算法--十进制转任意进制

这个不是在线的ACM题,是我自己想的。用到了栈的操作。能将十进制转换成64进制内的任何进制数。程序里面用大小写英文字母加‘#’和‘*’号表示了从10到63的数字。具体见程序。

首先是栈的相关函数实现,文件为:stack.c

#include <stdio.h> #include <stdlib.h> #include <string.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define StkType int typedef struct { StkType *base; StkType *top; int stacksize; }SqStack; int InitStack(SqStack *S) { S->base=(StkType *)malloc(STACK_INIT_SIZE *sizeof(StkType)); if(!S->base) return 0; S->top=S->base; S->stacksize=STACK_INIT_SIZE; return 1; } int GetTop(SqStack *S,StkType *ch) { if(S->top == S->base) return 0; *ch = *(S->top - 1); return 1; } int Push(SqStack *S,StkType ch) { if(S->top - S->base >= S->stacksize) { S->base=(StkType *)realloc(S->base,(S->stacksize + STACKINCREMENT)* sizeof(StkType )); if(!S->base) return 0; S->top=S->base+S->stacksize; S->stacksize += STACKINCREMENT; } *S->top=ch; S->top++; return 1; } int Pop(SqStack *S,StkType *ch) { if(S->top == S->base) return 0; --S->top; *ch=*S->top; return 1; } 

然后是数制转换程序:NumConvert.c

#include <stdio.h> #define StkType int typedef struct { StkType *base; StkType *top; int stacksize; }SqStack; char Toletter(int N) { switch(N) { case 0:return '0';break; case 1:return '1';break; case 2:return '2';break; case 3:return '3';break; case 4:return '4';break; case 5:return '5';break; case 6:return '6';break; case 7:return '7';break; case 8:return '8';break; case 9:return '9';break; case 10:return 'a';break; case 11:return 'b';break; case 12:return 'c';break; case 13:return 'd';break; case 14:return 'e';break; case 15:return 'f';break; case 16:return 'g';break; case 17:return 'h';break; case 18:return 'i';break; case 19:return 'j';break; case 20:return 'k';break; case 21:return 'l';break; case 22:return 'm';break; case 23:return 'n';break; case 24:return 'o';break; case 25:return 'p';break; case 26:return 'q';break; case 27:return 'r';break; case 28:return 's';break; case 29:return 't';break; case 30:return 'u';break; case 31:return 'v';break; case 32:return 'w';break; case 33:return 'x';break; case 34:return 'y';break; case 35:return 'z';break; case 36:return 'A';break; case 37:return 'B';break; case 38:return 'C';break; case 39:return 'D';break; case 40:return 'E';break; case 41:return 'F';break; case 42:return 'G';break; case 43:return 'H';break; case 44:return 'I';break; case 45:return 'J';break; case 46:return 'K';break; case 47:return 'L';break; case 48:return 'M';break; case 49:return 'N';break; case 50:return 'O';break; case 51:return 'P';break; case 52:return 'Q';break; case 53:return 'R';break; case 54:return 'S';break; case 55:return 'T';break; case 56:return 'U';break; case 57:return 'V';break; case 58:return 'W';break; case 59:return 'X';break; case 60:return 'Y';break; case 61:return 'Z';break; case 62:return '#';break; case 63:return '*';break; } return -1; } int main() { SqStack S; int Dnum,Xnum,res,i=0; InitStack(&S); printf("what's the number you want to convert:\n"); scanf("%d",&Dnum); printf("you want to convert %d to what scale:\n",Dnum); scanf("%d",&Xnum); while(Dnum) { if(!Push(&S,Dnum % Xnum)) { printf("push error\n"); return 0; } Dnum = Dnum/Xnum; } printf("The result is:"); while(Pop(&S,&res)) printf("%c",Toletter(res)); printf("\n"); return 1; } 


在linux下编译:gcc -o NumConvert NumConvert.c stack.c

    原文作者:进制转换
    原文地址: https://blog.csdn.net/linuxblack125125/article/details/7814606
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞