输入:
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) 回帖