在 Begin-End 区间实现DecToTer_int(d)函数,其功能是计算十进制整数 d 对应的三进制表示,说明如下:
1)d 可能为正数、0 和负数;
2)不准使用 Python 提供的进制转换函数;
########## Begin ##########
def f (d):
if d==1:
return '1'
else:
return f(d//3)+str(d%3)
def DecToTer_int(d):
if d==0:
return '0'
if d>0:
return f(d)
if d<0:
return '-'+f(d)
########## End ##########
d = int(input()) #十进制整数
t = DecToTer_int(d) #转换成三进制
print('%s -> %s' % (d, t))
问题代码分析:
-272 -> -101002
Traceback (most recent call last): File "src/step1/student1.py", line 16, in
t = DecToTer_int(d) #转换成三进制 File "src/step1/student1.py", line 13, in DecToTer_int return '-'+f(d) File "src/step1/student1.py", line 6, in f return f(d//3)+str(d%3) File "src/step1/student1.py", line 6, in f return f(d//3)+str(d%3) File "src/step1/student1.py", line 6, in f return f(d//3)+str(d%3) [Previous line repeated 993 more times] File "src/step1/student1.py", line 3, in f if d==1: RecursionError: maximum recursion depth exceeded in comparison
这个是错误代码的运行结果,代码在当d为正数,为0时都能得到正确的答案,但是当在负数时,就出现了上面的报错,出错可能是由于:
- 公式写错了,导致运算不对
- 循环可能有问题
在写这篇文的时候又测试了,显示通过了,有点懵!!!
这是我在出现报错后修改的,还有别的方式,但我更喜欢递归。
########## Begin ##########
def f(d):
if d==1:
return '1'
if d>0:
return f(d//3)+str(d%3)
def DecToTer_int(d):
if d==0:
return '0'
if d>0:
return f(d)
if d<0:
d=-d
return '-' + f(d)
########## End ##########
d = int(input()) #十进制整数
t = DecToTer_int(d) #转换成三进制
print('%s -> %s' % (d, t))



