首页 > Shopee笔试题:化简循环小数
头像
小小蛮三
编辑于 2021-04-18 15:18
+ 关注

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


求大佬指点~

全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐