백준 5376번 소수를 분수로
< 백준 5376번 소수를 분수로 - 마포 코딩박 >
사용한 알고리즘: 수학
소수를 입력받으면 분수로 출력하는 문제였습니다.
문제풀이는 다음과 같습니다.
(1) (수학)
순환소수의 분수 변환을 간단히 적겠습니다.
분자 : (정수+순환소수 끝까지) - (정수~순환하지 않는 부분까지)
분모 : 순환소수 자리 수만큼 9 찍고 비순환 소수 자리 수만큼 0 추가
예를들어 1.0(123) = 10123 - 10 / 9990 = 10113/9990 입니다.
(2) (코드 11~50)
과정 (1) 의 규칙에 따라 분자, 분모를 만들어 줍니다.
기약분수로 출력해줍니다.
사용한 알고리즘: 수학
소수를 입력받으면 분수로 출력하는 문제였습니다.
문제풀이는 다음과 같습니다.
(1) (수학)
순환소수의 분수 변환을 간단히 적겠습니다.
분자 : (정수+순환소수 끝까지) - (정수~순환하지 않는 부분까지)
분모 : 순환소수 자리 수만큼 9 찍고 비순환 소수 자리 수만큼 0 추가
예를들어 1.0(123) = 10123 - 10 / 9990 = 10113/9990 입니다.
(2) (코드 11~50)
과정 (1) 의 규칙에 따라 분자, 분모를 만들어 줍니다.
기약분수로 출력해줍니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
typedef long long ll; | |
int T; | |
string ques; | |
ll GCD(ll x, ll y){ | |
if(y==0) return x; | |
return GCD(y, x%y); | |
} | |
// 비순환 소수는 순환소수 앞에만 나올 수 있다. | |
void makeans(string A){ | |
int SS = A.size(); | |
// 분자 | |
ll BoonJa = 0LL; | |
// 앞에 두개는 '0.' 이므로 3번째부터 봄 | |
int idx = 2; | |
while(1){ | |
if(idx==SS) break; | |
if(A[idx]=='(') break; | |
BoonJa = BoonJa*10+(A[idx]-'0'); | |
idx++; | |
} | |
// 비순환 소수 자리수 | |
int cnt = idx-2; | |
// 순환 소수 자리수 | |
int cnt2 = 0; | |
//순환소수 있을때 A[idx] = '(' 상태 | |
if(idx!=SS){ | |
// temp2 = 비순환 소수 | |
ll temp2 = BoonJa; | |
while(1){ | |
idx++; | |
if(A[idx]==')') break; | |
BoonJa = BoonJa*10+(A[idx]-'0'); | |
cnt2++; | |
} | |
// 전체 - 비순환소수 | |
if(BoonJa!=temp2) BoonJa -= temp2; | |
} | |
// 분모 | |
ll BoonMo = 0LL; | |
//순환소수 자리 수만큼 분모에 9채우기 | |
while(cnt2--) BoonMo = BoonMo*10+9; | |
if(BoonMo == 0LL) BoonMo = 1LL; | |
// 비순환 소수 자리 수만큼 분모 뒤에 0 채우기 | |
while(cnt--) BoonMo*=10; | |
ll G = GCD(BoonMo, BoonJa); | |
cout << BoonJa/G << '/' << BoonMo/G << '\n'; | |
} | |
int main(){ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL); | |
cin >> T; | |
while(T--){ | |
cin >> ques; | |
makeans(ques); | |
} | |
return 0; | |
} |
댓글
댓글 쓰기
긴 글 읽어주셔서 감사합니다.
궁금한게 있으시다면 댓글 달아주세요!