예)
X * Y = 30 이라고 가정했을때
가능한 X, Y값을 구하는 함수 입니다.
코드
def get_div_decimals(n: int, m: int = 1):#, limit: int = 0) -> Tuple[int, List[int], List[int]]:
q = m // n
m = (m % n) * 10
dividend = m
dividend_list = []
digit_list = []
while True:
# print(digit_lst)
if dividend in dividend_list:
break
dividend_list.append(dividend)
digit = dividend // n
dividend = (dividend % n) * 10
digit_list.append(digit)
idx = dividend_list.index(dividend)
# print(digit_list, idx)
non_cyc = digit_list[:idx]
cyc = digit_list[idx:]
return q, non_cyc, cyc
def Possible_Number(x,only_whole_number:bool=False,infinite_decimal=False,ALL=False):
if only_whole_number:
BreakPoint = None
for i in range(1,x+1):
try:
y = x/i
if only_whole_number:
if int(y)==y:
if i==BreakPoint:
print(i,"이상으로는 대칭입니다...")
break
print('{2:<5} = {0:^10} * {1:^15}'.format(i,y,x))
BreakPoint = y
else:
q, non_cyc, cyc = get_div_decimals(i,x)
if ALL:
print('{2:<5} = {0:^10} * {1:^40.20f}'.format(i,y,x))
elif infinite_decimal:
s = '{}.{}({}...)'.format(q,"".join(map(str, non_cyc)),"".join(map(str, cyc)))
if ''.join(map(str, cyc)) == '0':
print('{2:<5} = {0:^10} * {1:^15}'.format(i,y,x))
else:
print('무한 소수 입니다. : {0:<5} = {1:^10} * {2:^15}[{3}]'.format(x,i,y,s))
else:
if ''.join(map(str, cyc)) == '0':
print('{2:<5} = {0:^10} * {1:^15}'.format(i,y,x))
except Exception as e:
print(e)
x = int(input('정수만 입력 : '))
Possible_Number(x,only_whole_number=False,infinite_decimal=True)
정수만(only_whole_number) False로 설정하면 계산 속도가 느려집니다.
ALL을 True로 할경우 모든 내용이 출력 됩니다.(only_whole_number, infinite_decimal 변수 무시)
코드 분석은 알아서 하시길...
참조 : https://daewonyoon.tistory.com/354
확인