刚才做完华为笔试题,大部分都是对数值、字符串进行处理,如果选择Python来进行处理,效率提高不止一点点!
废话不多说,直接上代码:
题1:
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 24 23:26:33 2017
@author: acelit
"""
#问题描述:将两个正整数按照从高位到低位取反后相加
#输入:两个[1,70000]内的整数
#输出:;两个整数取反和
def reverseAdd(a,b):
if a < 1 or a > 70000 or b < 1 or b > 70000:
return -1
else:
astr = str(a)
bstr = str(b)
arev = brev = 0
indexa = indexb = 0
for i in astr:
arev += int(i)*10**indexa
indexa += 1
for j in bstr:
brev += int(j)*10**indexb
indexb += 1
return arev + brev
#测试
num1 = 6768
num2 = 9002
revSum = reverseAdd(num1, num2)
print revSum
题2:
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 24 20:19:51 2017
@author: acelit
"""
#问题描述:按照6种方式旋转骰子,输出骰子最后的标记
#旋转骰子:L-向左 R-向右 F-向前 B-向后 A-逆时针旋转90度 C-顺时针旋转90度
#骰子标记:初始标记123456,分别为左右前后上下
#输入:骰子旋转序列
#输出:骰子对应标记,若输入字符串不合法则返回-1
def splitString(string):
num = [1,2,3,4,5,6]
for i in string:
if i == 'L':
num = [num[4],num[5],num[2],num[3],num[1],num[0]]
elif i == 'R':
num = [num[5],num[4],num[2],num[3],num[0],num[1]]
elif i == 'F':
num = [num[0],num[1],num[4],num[5],num[3],num[2]]
elif i == 'B':
num = [num[0],num[1],num[5],num[4],num[2],num[3]]
elif i == 'A':
num = [num[3],num[2],num[0],num[1],num[4],num[5]]
elif i == 'C':
num = [num[2],num[3],num[1],num[0],num[4],num[5]]
else:
return -1
return str(num[0])+str(num[1])+str(num[2])+str(num[3])+str(num[4])+str(num[5])
#测试
test = 'RA'
result = splitString(test)
print result
对比一下C++/Java的实现代码,我只有一个感受:
Life is short, I use Python!:)