6-2 用顺序栈实现将非负的十进制数转换为指定的进制数【有题解视频,可本地编译器调试】 分数 12 作者 CUIT通信DS课程组 单位 成都信息工程大学 利用顺序栈将输入的非负的十进制数N转换为指定的d(二、八或十六)进制数。 顺序栈的定义如下: #define STACKSIZE 100 typedef int DataType; typedef struct { DataType items[STACKSIZE]; /*存放栈中元素的一维数组*/ int top; /*用来存放栈顶元素的下标*/ }SqStack; 函数接口定义: int DecimalConvert(SqStack *s, int dec, int scale); 函数参数说明:形参--s、dec、scale,其中,s是存放转换
时间: 2024-03-09 17:47:56 浏览: 503
用C语言顺序栈实现十进制和二进制的转换.docx
以下是实现将非负的十进制数转换为指定进制的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACKSIZE 100
typedef int DataType;
typedef struct {
DataType items[STACKSIZE];
int top;
} SqStack;
void InitStack(SqStack *s) {
s->top = -1;
}
int StackEmpty(SqStack *s) {
return s->top == -1;
}
int StackFull(SqStack *s) {
return s->top == STACKSIZE - 1;
}
int Push(SqStack *s, DataType x) {
if (StackFull(s)) {
return 0;
}
s->top++;
s->items[s->top] = x;
return 1;
}
int Pop(SqStack *s, DataType *x) {
if (StackEmpty(s)) {
return 0;
}
*x = s->items[s->top];
s->top--;
return 1;
}
int DecimalConvert(SqStack *s, int dec, int scale) {
if (dec < 0) {
return 0;
}
do {
int remainder = dec % scale;
Push(s, remainder);
dec /= scale;
} while (dec != 0);
return 1;
}
int main() {
SqStack s;
InitStack(&s);
int dec, scale;
printf("Enter a non-negative decimal number: ");
scanf("%d", &dec);
printf("Enter the scale to convert to (2, 8, or 16): ");
scanf("%d", &scale);
if (scale != 2 && scale != 8 && scale != 16) {
printf("Invalid scale.\n");
return 1;
}
if (DecimalConvert(&s, dec, scale)) {
printf("The %d-digit representation of %d is: ", scale, dec);
int x;
while (Pop(&s, &x)) {
if (x < 10) {
printf("%d", x);
} else {
printf("%c", 'A' + x - 10);
}
}
printf("\n");
} else {
printf("Invalid decimal number.\n");
return 1;
}
return 0;
}
```
函数接口定义如下:
```c
int DecimalConvert(SqStack *s, int dec, int scale);
```
其中,`s` 是指向栈的指针,`dec` 是需要转换的十进制数,`scale` 是指定的进制数。函数返回值为 1 表示转换成功,返回 0 表示转换失败(通常是因为 `dec` 参数小于 0)。在主函数中可以通过调用 `DecimalConvert` 函数将十进制数转换成指定进制数,并将结果存储在顺序栈中,最后再通过调用 `Pop` 函数将结果弹出并输出。注意,当 `scale` 不是 2、8 或 16 时,应该输出提示信息并结束程序。
阅读全文