본문 바로가기
프로그래밍/Python

[파이썬] 정수를 입력받아 곱셈 과정을 출력하는 프로그램

by 청량리 물냉면 2023. 3. 20.
반응형
문제

사용자에게 두 개의 정수를 입력받아 곱셈과정을 단계별로 출력하는 프로그램을 작성하라.(곱셈 단계별 숫자의 위치를 정확히 맞추어 출력)

 

예시)

출처: 경향신문

 

🐍파이썬 코드
더보기

❌실패한 코드

print('1. 1번째 n자리 정수 출력')
a = int(input('n자리 정수를 입력하세요: '))
print('2. 2번째 n자리 정수 출력')
b = int(input('n자리 정수를 입력하세요: '))
print('3. 곱셈 결과 출력')

#두 수의 곱셈 결과를 담은 리스트
resultList = list(str(abs(a * b)))

#두 수의 곱셈 결과를 담은 리스트
aLength = len(str(abs(a)))
bLength = len(str(abs(b)))
bList = list(str(abs(b)))

if aLength >= bLength:
    max = aLength
else:
    max = bLength

#총 공백 - a 자리수: a 공백갯수
aEmpt = len(resultList) + 1 - aLength
#총 공백 - b 자리수: b 공백갯수 (X 자리 포함)
bEmpt = len(resultList) + 1 - bLength - 1 

#두 수를 식으로 구현
if a < 0:
    print(' ' * (aEmpt - 2), end = '')
else:
    print(' ' * aEmpt, end = '')
print(str(a))

if b < 0:
    print('X'+' ' * (bEmpt - 2), end = '')
else:
    print('X'+' ' * bEmpt, end = '')
print(str(b))
print('-' * ((len(resultList) + 1))) #총 공백+1(X 자리)만큼 -생성

#계산과정(B의 길이만큼 반복)
j = 0
for i in range(bLength - 1, -1, -1):  #bLength-1부터 0까지 반복
     #a, b 둘 중 큰 값보다 자릿수가 클 때 
    if len(str(abs(a) * (int)(bList[i]))) > max: 
        print(' ' * (aEmpt - j), end = '')  #앞공백
        if a * (int)(bList[i]) < 0:
            print(abs(a) * (int)(bList[i]), end = '')  #계산식. b 리스트 맨 뒤에서부터 차례로 a와 곱함
        else:
            print(a * (int)(bList[i]), end = '')  
        print(' ' * j)  #뒷공백
    #a, b 둘 중 큰 값보다 자릿수가 작거나 같을 때
    else: 
        print(' ' * (aEmpt - j - 1), end = '')  #앞공백 줄이기
        if a * (int)(bList[i]) < 0:
            print(abs(a) * (int)(bList[i]), end = '')  #계산식. b 리스트 맨 뒤에서부터 차례로 a와 곱함
        else:
            print(a * (int)(bList[i]), end = '')  
        print(' ' * j)  #뒷공백 유지
   
    
    j += 1

print('-' * ((len(resultList) + 1)))

if a * b < 0:
    print(str(a * b))
else:
    print(' ' + str(a * b))
print('1. 1번째 n자리 정수 출력')
a = int(input('n자리 정수를 입력하세요: '))
print('2. 2번째 n자리 정수 출력')
b = int(input('n자리 정수를 입력하세요: '))
print('3. 곱셈 결과 출력')

Result = list(str(a*b))

print(' ' * (len(Result)-len(str(a))+1), end = '')
print(a)
print('X' + ' ' * (len(Result)-len(str(b))), end = '')
print(b)

print('-' * (len(Result)+2))

bList = list(str(abs(b)))
j = 0
for i in range(len(bList)-1, -1, -1):    
    step = a * int(bList[i])   
    if a < 0 or b < 0:
        print(' ', end = '')
    if a > 0 and b > 0:
        print(' ', end = '')
    print(' ' * (len(Result)-len(str(abs(step)))-j), end = '')       
    print(str(abs(step)))
    j += 1 

print('-' * (len(Result)+2))
print(' ' + str(a*b))

 

 

실행결과

반응형