공유 블로그

예)

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

 

확인

 

 

 

공유하기

facebook twitter kakaoTalk naver band kakaostory Copy URL