728x90
1. 문제
https://codeup.kr/problem.php?id=2034
인수 분해
$a$와 $b$가 입력된다.($-100 <= a, b <= 100$)
codeup.kr
[출처 : 코드업(https://codeup.kr/)]
이번 문제는 주어진 2차방정식의 해를 구하는 문제입니다.
근의 공식을 이용하면 쉽게 해결할수있습니다.
2. 풀이방법
STEP 1. 근의 공식에서 "b^2-4c"가 음수인지, 정수가 아닌 실수인지 체크
STEP 2. 근의 공식의 값이 정수가 아닌 실수인지 체크
STEP 3. 2중근인지 체크
STEP 4. 두 정수근을 출력
3. 해답
#include <stdio.h>
#include <math.h>
void print(int n) {
if (n >= 0) printf("x+%d", n);
else printf("x%d", n);
}
int main() {
int b, c, root, x, y;
scanf("%d %d", &b, &c);
root = (b * b - 4 * c);
if (root < 0) {
// 허수가 나오면
printf("-1");
return 0;
}
else if ((int)sqrt(root) != sqrt(root)) {
// 정수가 아닌 실수
printf("-1");
return 0;
}
root = (int)sqrt(root);
x = -b + root;
y = -b - root;
if (x % 2 != 0 || y % 2 != 0) {
// 정수가 아닌 실수
printf("-1");
return 0;
}
else if (root == 0) {
// 2중근
if (b > 0) print(b / 2); // 음수일때
else print(b / 2); // 양수일때
return 0;
}
else {
// 두근이 모두 정수
x /= 2;
y /= 2;
if (x > y) {
print(-x);
printf("\n");
print(-y);
}
else {
print(-y);
printf("\n");
print(-x);
}
}
return 0;
}
'프로그래밍 > CodeUp' 카테고리의 다른 글
CodeUp[Q_2041] : 회원들의 나이 차이 (0) | 2020.03.27 |
---|---|
CodeUp[Q_2035] : 앉을 수 있는 자리 (0) | 2020.03.26 |
CodeUp[Q_2029] : 숫자 끼워 넣기 (0) | 2020.03.24 |
CodeUp[Q_2028] : 삼각수 (0) | 2020.03.23 |
CodeUp[Q_2027] : 콘웨이의 1만 달러짜리 수열 (0) | 2020.03.21 |