用stack编写数制转换函数(十进制转八进制)代码要求考虑正负整数和0
时间: 2023-05-18 10:03:13 浏览: 123
以下是用stack编写的数制转换函数(十进制转八进制)的代码,考虑了正负整数和0的情况:
```python
def decimal_to_octal(decimal_num):
if decimal_num == 0:
return '0'
is_negative = False
if decimal_num < 0:
is_negative = True
decimal_num = abs(decimal_num)
stack = []
while decimal_num > 0:
remainder = decimal_num % 8
stack.append(str(remainder))
decimal_num //= 8
octal_num = ''
while stack:
octal_num += stack.pop()
if is_negative:
octal_num = '-' + octal_num
return octal_num
```
注意:这是一个示例答案,可能不是最优解,也不一定是唯一正确的答案。
相关问题
用c++的stack编写数制转换函数(十进制转八进制)代码要求考虑正负整数和0
以下是用 C 的 stack 编写的十进制转八进制的数制转换函数,可以考虑正负整数和 0:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define STACK_SIZE 100
typedef struct {
int top;
int data[STACK_SIZE];
} Stack;
void init_stack(Stack *s) {
s->top = -1;
}
bool is_empty(Stack *s) {
return s->top == -1;
}
bool is_full(Stack *s) {
return s->top == STACK_SIZE - 1;
}
void push(Stack *s, int x) {
if (is_full(s)) {
printf("Stack overflow\n");
exit(EXIT_FAILURE);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow\n");
exit(EXIT_FAILURE);
}
return s->data[s->top--];
}
void convert(int n) {
Stack s;
init_stack(&s);
bool negative = false;
if (n < 0) {
negative = true;
n = -n;
}
do {
push(&s, n % 8);
n /= 8;
} while (n > 0);
if (negative) {
putchar('-');
}
while (!is_empty(&s)) {
printf("%d", pop(&s));
}
putchar('\n');
}
int main() {
int n;
printf("Enter a decimal number: ");
scanf("%d", &n);
printf("Octal equivalent: ");
convert(n);
return 0;
}
```
注意:这个函数只能处理 int 类型的数,如果需要处理更大的数,需要使用其他方法。
使用栈实现数制的转换十进制转二八十六进制
以下是Python代码实现:
```python
def decimal_to_base(num, base):
stack = []
while num > 0:
rem = num % base
stack.append(str(rem))
num //= base
result = ""
while stack:
result += stack.pop()
return result
num = 123
print("十进制数 {} 转二进制为:{}".format(num, decimal_to_base(num, 2)))
print("十进制数 {} 转八进制为:{}".format(num, decimal_to_base(num, 8)))
print("十进制数 {} 转十六进制为:{}".format(num, decimal_to_base(num, 16)))
```
输出结果为:
```
十进制数 123 转二进制为:1111011
十进制数 123 转八进制为:173
十进制数 123 转十六进制为:7B
```
阅读全文