我开始关注斯坦福大学的CS161课程“算法和数据结构在线课程”
我查过一些关于整数运算的小学算法。你知道吗
我有伪代码中的加法算法,并对在python2.7中实现它感兴趣(相应地符合MIT标准)。你知道吗
我已经分析了我的实现,认为它几乎是正确的,但是Python解释器提供了一些关于未初始化列表和变量的反馈。你知道吗
注意我并不完全精通Python,由于缺乏基本数据结构和代码结构方面的知识,可能会出现一些明显的语法错误。你知道吗
我对下面的代码有几个问题:
def add(a,b):
i = 0
carry = 0
x[i] = [None]*N
y[i] = [None]*N
while x[i] > 0 and y[i] > 0:
x[i], y[i] = a%10, b%10
a , b = a/pow(10,i+1), b/pow(10,i+1)
N += i
for i in range(N):
x[i] = x[N-i]
y[i] = y[N-i]
r[i] = (x[i] + y[i] + carry)%10
carry = (x[i] + y[i] + carry)/10
r[N] = carry
return r
算法说明:
add()
函数将两个N位整数a和b作为输入,并返回一个整数,其中N位或N+1位对应于a
和b
的和。你知道吗
它首先将a
和b
分解成大小为N的列表,通过将每个数字从最小幂次的数字提取到最大幂次为10的数字来保存和存储a
(分别为b
)的N个数字。你知道吗
然后用x[N-i]
替换所有x[i]
(分别是。y[i]
与y[N-i]
)进行运算,然后通过在每次迭代中处理加法的进位来计算x[i]+y[i]
。你知道吗
进位按值动态递增。 当for循环结束时,我们将总和的最新数字r[N]指定为进位值(>;=0)。你知道吗
问题:
x[i]
和y[i]
是件好事吗?方法是将其元素的值赋为[None]
N次?你知道吗x[i]
和y[i]
这样初始化时,while
循环是否应该再次工作,因为我的条件在x[i]
和y[i]
上?你知道吗r[N]
?我们应该键入returnr[N]
还是只返回r
?你知道吗欢迎其他有益的贡献和评论。你知道吗
x = [None for _ in xrange(N)]
,但性能非常相似,这不太重要—可读性才是最重要的。你知道吗x[i] is None
来查看该值是否为none。否则,我只需执行x[i]
,检查I是否为None、0或False。你知道吗return r
请看下面的代码。我修复了add(),包括超出界限的索引和算法问题。然后实现了addSimplified(),它不需要额外的helper数组就可以实现同样的功能。你知道吗
相关问题 更多 >
编程相关推荐