进制转换函数的实现。 void conversion(int N) {//十进制转换成八进制数 Stack S; InitStack(S); //初始化空栈S while(N) {//当N非零时,循环 Push(S,N%8); //把N与8求余得到的八进制数压入栈S N=N/8; //N更新为N与8的商 } while(!StackEmpty(S))//当栈S非空时,循环 { Pop(S,e); //弹出栈顶元素e printf( “%d”, e ); //输出e } } void main( void ) { conversion( 200 ); } (1)添加栈操作函数,使上面的程序能够运行。 (2)改进进制转换函数,使之能实现整数(正、0、负)的任意进制(2到62,大于9时,用A-Z、a-z表示)的转换。
时间: 2024-03-22 12:38:23 浏览: 45
以下是栈操作函数的实现:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top;
} Stack;
void InitStack(Stack &S) {
S.top = -1;
}
bool StackEmpty(Stack S) {
if (S.top == -1) {
return true;
}
return false;
}
bool Push(Stack &S, int x) {
if (S.top == MAXSIZE - 1) {
return false;
}
S.top++;
S.data[S.top] = x;
return true;
}
bool Pop(Stack &S, int &x) {
if (S.top == -1) {
return false;
}
x = S.data[S.top];
S.top--;
return true;
}
```
以下是改进后的进制转换函数的实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top;
} Stack;
void InitStack(Stack &S) {
S.top = -1;
}
bool StackEmpty(Stack S) {
if (S.top == -1) {
return true;
}
return false;
}
bool Push(Stack &S, int x) {
if (S.top == MAXSIZE - 1) {
return false;
}
S.top++;
S.data[S.top] = x;
return true;
}
bool Pop(Stack &S, int &x) {
if (S.top == -1) {
return false;
}
x = S.data[S.top];
S.top--;
return true;
}
void conversion(int N, int base) {
char baseNums[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
Stack S;
InitStack(S);
int remainder;
while (N != 0) {
remainder = N % base;
Push(S, remainder);
N = N / base;
}
if (StackEmpty(S)) {
printf("0");
}
while (!StackEmpty(S)) {
Pop(S, remainder);
printf("%c", baseNums[remainder]);
}
}
int main() {
int N = 200;
int base = 16;
conversion(N, base);
return 0;
}
```
其中,`baseNums`数组存储了各个进制下的数字字符,例如十六进制下为0-9和A-F,因此`baseNums`数组为"0123456789ABCDEF"。在转换过程中,每次取余数并将余数压入栈中,将原数除以进制更新为新的数,直到新的数为0为止。最后,弹出栈中的元素并转换为对应进制下的数字字符输出即可。
阅读全文