我已经开始在Coursera上关注斯坦福大学的CS161,"一个关于算法和数据结构的在线课程。"
我抬头找到了围绕整数算术的小学校算法。
我在伪代码中有加法算法,并且有兴趣在 Python 2.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
的总和。 / p>
首先将a
和b
分解为大小为N的列表,并通过从最少提取每个数字来保存a
(分别为b
)的N个数字将数字提供给最大功率为10的数字。
然后将所有x[i]
替换为x[N-i]
(分别为y[i]
和y[N-i]
),然后通过处理x[i]+y[i]
来计算x[i]
。每次迭代都会进行。
进位按值动态递增。 当for循环结束时,我们将和的最新数字r [N]指定为进位的值(> = 0)。
问题:
y[i]
和[None]
来初始化列表是一件好事。价值为x[i]
N次?y[i]
和while
已初始化,x[i]
循环是否会再次有效,因为我的条件是y[i]
和r[N]
?r[N]
?我们应该输入return r
还是只返回{{1}}?欢迎其他有用的贡献和评论。
答案 0 :(得分:0)
asm
(
"mov $0x00, %%ah \n"
"mov $0x00, %%al \n"
"int $0x16 \n"
: "=a"(c)
);
,但性能非常相似,这不太可能重要 - 可读性才是最重要的。x = [None for _ in xrange(N)]
查看值是否为none。否则,我只做x[i] is None
检查我是不是非,也不是0或假。x[i]
查看以下代码。我修复了add(),包括out of bound索引和算法问题。然后实现了addSimplified(),它可以在没有其他辅助数组的情况下执行相同操作。
return r