上周去面试遇到的问题,当时只说了想法,觉得很有意思的题目,回来就自己写了下,言归正传,开始码砖,全是干货。
1:大数字符串形式相加
#!/usr/bin/python
import sys
a=str(sys.argv[1])
b=str(sys.argv[2])
a = a[::-1]
b = b[::-1]
a=list(a)
b=list(b)
new_list = []
for i in range(len(a)):
a[i] = int(a[i])
for i in range(len(b)):
b[i] = int(b[i])
for i in xrange(0, max([len(a), len(b)])):
if i <= (min([len(a), len(b)]) - 1):
new_list.append(a[i] + b[i])
else:
if len(a) > len(b):
new_list.append(a[i])
else:
new_list.append(b[i])
for i in xrange(0, len(new_list)):
if new_list[i] >= 10:
new_list[i] = new_list[i] - 10
if (i + 1) == len(new_list):
new_list.append(1)
else:
new_list[i+1] = new_list[i+1] + 1
new_list = new_list[::-1]
for i in range(len(new_list)):
new_list[i] = str(new_list[i])
print "".join(new_list)
2:大数字符串形式相乘
#!/usr/bin/python
import sys
import math
a=str(sys.argv[1])
b=str(sys.argv[2])
a=list(a)
b=list(b)
new_list = []
for i in xrange(len(a)):
a[i] = int(a[i])
for i in xrange(len(b)):
b[i] = int(b[i])
for i in xrange(len(b)):
list = []
for j in xrange(len(a)):
list.append(a[j]*b[i])
new_list.append(list)
new_list = new_list[::-1]
for i in xrange(len(b)):
for j in xrange(len(b) -i -1):
new_list[i].insert(0,0)
for k in xrange(i):
new_list[i].append(0)
result = []
for i in xrange(len(a) + len(b) - 1):
result.append(0)
for j in xrange(len(b)):
result[i] += new_list[j][i]
result = result[::-1]
for i in range(len(result)):
if result[i] / 10 > 0:
temp = int(math.floor(result[i] / 10))
result[i] = result[i] - temp * 10
if i+1 == len(result):
result.append(str(temp))
else:
result[i+1] = result[i+1] + temp
result[i] = str(result[i])
result = result[::-1]
print "".join(result)