algorithm/problem solving

acmicpc.net 1008번 A/B

qkqhxla1 2016. 6. 25. 15:08

https://www.acmicpc.net/problem/1008


문제

A/B를 계산하시오.


입력

첫째 줄에 A와 B가 주어진다. (0 < A,B < 10)


출력

첫째 줄에 A/B를 소수점 9자리 이상 출력한다. 절대/상대 오차는 10-9 까지 허용한다.


방법론.

A/B를 계산하는데 소숫점을 9자리이상 출력하고, 오차가 낮아야 한다. 당연히 그냥 /나 float같은 함수를 쓰게 되면 값이 적당히 나오고, 알고리즘 문제인만큼 이렇게 간단한게 나올리가 없다. 나누기를 구현하는 문제이다. 나누기를 구현하면 된다.

# -*- encoding: cp949 -*-
from __future__ import print_function
n,m = map(int,raw_input().split())
flag = True
for i in xrange(100):
    if n < m:
        n *= 10
        if flag: 
            print('0.',end='')
            flag = False
        else:
            print('0',end='')
    print(int(n/m),end='')
    n %= m
    n *= 10

파이썬 2버전에서, 특히 2버전에서 print로 출력시 자동으로 개행(\n)이 붙게 된다. print '',처럼 끝에 ,를 붙임으로서 야매로 출력을 할 수 있지만 공백이 한칸 더 출력되게 된다. 이걸 방지하려면....


1. s = ''처럼 빈 문자열을 선언 후 출력해야될 곳에서 출력하지 말고 s += ~~처럼 문자열에 하나하나 더한 후 맨 끝에 출력한다.


2. s = []처럼 빈 리스트를 선언 후 s.append()등으로 추가한 후 맨 마지막에 ''.join(s)등으로 출력한다.


3. 위 소스에 쓴 방법인데 파이썬 3버전의 print함수를 가져와서 end=''처럼 print함수에 인자를 줘서 하는 방법 등이 있다.


4. import sys를 한 후 sys.stdout.write('출력할거') 마찬가지로 이렇게 출력하게 되면 뒤에 공백없이 출력이 된다. 


5. print '\ba', 처럼 ,를 붙여서 출력하되 맨 앞에 \b가 있으면 이게 백스페이스이므로 맨 끝에 공백이 지운 상태로 출력된다고 한다. 

print '111111111',

print '\b2222222'


또다른 방법이 있겠으나 이정도면 충분하다고 생각한다.