用c语言将一个十进制的正整数 X 转换成 r(r=2~9)进制数,并输出转换后的值。 【实验要求】 要求采用链栈实现,链栈定义如下: typedef struct node { int num; struct node *next; }Lnode,*pNode; 【测试界面】 请输入一个需转换的正整数: 123 需转换成几进制的数(2~9)? 8 【输出】 173
时间: 2024-02-24 19:59:34 浏览: 23
以下是使用链栈实现将一个十进制正整数转换为r进制数的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈节点结构体
typedef struct node {
int num;
struct node *next;
} Lnode, *pNode;
// 初始化链栈
pNode initStack() {
pNode top = (pNode)malloc(sizeof(Lnode));
top->next = NULL;
return top;
}
// 判断链栈是否为空
int isEmpty(pNode top) {
return top->next == NULL;
}
// 入栈
void push(pNode top, int num) {
pNode newNode = (pNode)malloc(sizeof(Lnode));
newNode->num = num;
newNode->next = top->next;
top->next = newNode;
}
// 出栈
int pop(pNode top) {
if (isEmpty(top)) {
printf("Stack is empty.");
return -1;
}
pNode p = top->next;
int num = p->num;
top->next = p->next;
free(p);
return num;
}
// 十进制正整数转换为r进制数
void decimalToR(int decimal_number, int r) {
pNode stack = initStack();
while (decimal_number != 0) {
push(stack, decimal_number % r);
decimal_number = decimal_number / r;
}
while (!isEmpty(stack)) {
printf("%d", pop(stack));
}
}
int main() {
int decimal_number;
int r;
printf("请输入一个需转换的正整数:");
scanf("%d", &decimal_number);
printf("需转换成几进制的数(2~9)? ");
scanf("%d", &r);
printf("%d in base %d is ", decimal_number, r);
decimalToR(decimal_number, r);
printf(" in base %d\n", r);
return 0;
}
```
测试结果:
```
请输入一个需转换的正整数:123
需转换成几进制的数(2~9)? 8
123 in base 8 is 173 in base 8
```