1.求一个32bit的数的反转。
分析:1.考虑溢出问题,2.考虑尾部为0的反转。
转成字符串进行反转,然后再转成整形,如果溢出则为0
def process(data):
result=0
data1 = int(data)
if data1 >= 0:
result=int(data[::-1])
else:
result=-1*int(str(-1*data1)[::-1])
if (result>2 ** 31-1) or (result<-2**31):
return 0
else:
return result
data=raw_input()
print process(data)
2.读入一个自然数,将n的阶乘结果的数值的每一位相加,返回相加结果。
例如 n=14,输出结果为45.14!=87178291200,累加和为45.
分析:先计算阶乘,然后分割数字,累加
data=int(raw_input())
num=reduce(lambda x,y:x*y,range(1,data+1))
print sum(map(int,str(num)))
3.设a,b,c,d均是0-9之间的数字,abcd,bcda是两个四位数,且有abcd+bcda=8888.求满足条件的所有a,b,c,d的值。
输出描述:输出所有满足条件的a,b,c,d的值,a,b,c,d之间用空格隔开,每个输出占一行。
分析:a必须小于等于8,b必须小于等于8, d+a=8从而d必须小于等于8,b+c=8,c必须小于等于8.……
从而推出没有进位。
a+b=8
a+d=8 b=d
b+c=8 a=c
b=8-a
很奇怪,直接输出是显示格式不正确,所以才存起来,再输出的。
data=[]
for a in range(9):
c=a
b=d=8-a
data.append([a,b,c,d])
for i in data:
for j in i:
print j,
print
4.实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除,输出删除这些单词后的字符串,保持原顺序。
abcdd
dd
sssddfg
sssdd
分析:字典记录每个字符出现次数,然后删除最小的。
data=raw_input()
dict_data={}
for i in set(data):
dict_data[i]=data.count(i)
min_value=min(dict_data.values())
result=""
for i in data:
if dict_data[i]!=min_value:
result+=i
print result
5.给定两个字符串,求他们前后重叠的最长子串的长度,比如abcde和cdefg是cde长度为3,注意是前后重叠,比如abcdeh和cdefg中的cde不是前后重叠,长度为0;
分析:后重叠与前重叠其实就是交换字符串位置。
提取data1的后字符串与data2的前字符串,相同则记录并终止程序,交换一次后再进行一次,统计最大值。
def process(a,b):
max_num=0
left = len(a) - len(b) if len(a) - len(b) > 0 else 0
for i in range(left, len(a)):
right = len(a) - i
suba = a[i:i+len(a) - left]
subb = b[0:right]
print suba,subb
if suba == subb:
if len(suba) > max_num:
max_num = len(suba)
break
return max_num
data=raw_input().split()
a,b=data[0],data[1]
print max(process(a,b),process(b,a))