문제상황
#include <stdio.h>
#include <math.h>
int main() {
int T;
scanf("%d", &T);
int x, y, n; //n은 거리
int a;
for (int i = 0; i < T; i++)
{
scanf("%d %d", &x, &y);
n = y - x;//45 50 이든 0 5이든 공간 이동 장치 작동 횟수
//차이 없음
a = (int)sqrt(n);
printf("a =%d", a);
if ((n) == a * a)
{
printf("%d\n", 2 * a - 1);
}
}
return 0;
}
4를 입력받아 제곱근을 구하려고
하였으나, 오류와 함께 값이 입력되지 않음.
4의 제곱근 2가 도출되어야하는데 이런식으로 나옴.
원인
sqrt함수는 인수로 int형을 받지 않기 때문에 error가 발생한 것.
해결과정
제곱근을 받는 함수는 정수형 입력을 받지 않는다.
즉,x,y,n은 모두 실수형이어야 함.
따라서 코드를 다음과 같이 수정하였습니다.
#include <stdio.h>
#include <math.h>
int main() {
int T;
scanf("%d", &T);
double x, y, n; //n은 거리
int a;
for (int i = 0; i < T; i++)
{
scanf("%lf %lf", &x, &y);
printf("y = %lf\n", y);
printf("x = %lf\n", x);
n = y - x;//45 50 이든 0 5이든 공간 이동 장치 작동 횟수
//차이 없음
printf("n = %lf\n", n);
a = (int)sqrt(n);
printf("a = %d\n", a);
if ((int)(n) == a * a)
{
printf("%d\n", 2 * a - 1);
}
}
return 0;
}
배운점
1)sqrt 함수는 실수형만을 인수로 갖는다.
2)double형은 scanf받을 때 %f로 받으면 에러난다. double은 printf, scanf 모두 %lf 형식지정자를 이용하자.
'프로그래밍 언어 > C' 카테고리의 다른 글
백준 C언어 1011번 Fly me to the Alpha Centauri 풀이 (0) | 2021.10.07 |
---|---|
백준 C언어 1978 소수 찾기 풀이 (0) | 2021.10.02 |
C언어 백준 10757 큰수 A+B 풀이 (1) | 2021.09.26 |
C언어 2839 설탕 배달 풀이 (0) | 2021.09.24 |
C언어 2775번 부녀회장이 될테야 풀이 (0) | 2021.09.24 |