Shopee笔试题:化简循环小数

输入:
0.3(333)
化简:
1/3

输入:
0.416(6)
化简:
5/12

我的解答(卡在了求公约数的时间复杂度上,正确率30%):
def find(n, m):
	if n < m:
		x = n
		n = m
		m = x

	while m != 0:
		y = n%m
		n = m
		m = y

	return n


def simplify(num, den):
	"""化简分数"""
	for i in range(2, num):
		while num%i == 0 and den%i == 0:
			num = num // i
			den = den // i

	return num, den


def to_frac(a, b=None):
	"""
	:param a: 非循环部分
	:param b: 循环部分
	:return: 分数
	"""

	num = int(a) - int(a[:-len(b)])
	den = '9'*len(b) + '0'*len(a[:-len(b)])
	return simplify(int(num), int(den))


def read_data():
	data = input()
	idx = data.find('(')

	a, b = None, 0
	if idx != -1:
		a = int(data[2:idx])
		b = int(data[idx + 1:-1])
	else:
		a = int(data[2:]) * 10

	a = str(a)
	b = str(b)
	while len(a) <= len(b):
		a = a + b

	return a, b


a, b = read_data()
print('{}/{}'.format(*to_frac(str(a), str(b))))

第二题二进制乘法,第三题比较神了:
已知一个序列编码,只有Y/N两种表现,Y表示传输数字X可以被该位的序号数字整除,例如:
4的序列编码为YYNY,则4可被1,2,4整除,无法被3整除。

已知有一个长度为L(L小于10^6)的编码序列,请问他有多少种表示方式?

示例输入:
4
示例输出:
6
解答:
YYYY  YYNY YYNN YNNN YNYN  YYYN


求大佬指点~
#笔试题目##Shopee#
全部评论
https://www.nowcoder.com/questionTerminal/0a5b316cfe9d4c4ba89c6c57a1ee516e
3 回复
分享
发布于 2021-04-07 17:50
我也是卡 40%。感觉也是复杂度的问题。 我加了假分数的示例处理也没有什么乱用,而且答案不算我错好像 就是输入 0.3(3)  输出  0 1/3        输入 1.3(3)  输出  1 1/3 然并卵,依旧40%
1 回复
分享
发布于 2021-04-10 22:54
联易融
校招火热招聘中
官网直投

相关推荐

点赞 评论 收藏
转发
点赞 4 评论
分享
牛客网
牛客企业服务