实现基于顺序栈的数制转换算法:输入1348(默认十进制),转换为八进制数,要求输出2504;输入2147483647,要求输出17777777777;输入4294967296,要求输出40000000000;输入 -1,要求输出提示如"输入必须为非负十进制整数!"。
时间: 2023-06-01 21:02:16 浏览: 155
以下是Python实现:
```python
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def size(self):
return len(self.items)
def decimal_to_octal(decimal):
if decimal < 0:
return "输入必须为非负十进制整数!"
elif decimal == 0:
return "0"
else:
stack = Stack()
while decimal > 0:
remainder = decimal % 8
stack.push(str(remainder))
decimal //= 8
octal = ""
while not stack.is_empty():
octal += stack.pop()
return octal
# 测试
print(decimal_to_octal(1348)) # 输出:2504
print(decimal_to_octal(2147483647)) # 输出:17777777777
print(decimal_to_octal(4294967296)) # 输出:40000000000
print(decimal_to_octal(-1)) # 输出:输入必须为非负十进制整数!
```
算法思路:
1. 如果输入的十进制数小于0,直接返回提示字符串。
2. 如果输入的十进制数等于0,直接返回字符串"0"。
3. 如果输入的十进制数大于0,用一个栈来存储转换后的八进制数的各位数字。
4. 每次取输入的十进制数除以8的余数,将余数压入栈中。
5. 将输入的十进制数整除8,重复步骤4,直到输入的十进制数为0。
6. 弹出栈中的元素,拼接成八进制数的字符串形式。
7. 返回八进制数的字符串形式。
阅读全文