코드업 C언어 기초 100제에서 [기초-산술연산] 풀기
(단, 입력되는 정수는 -1073741824 ~ 1073741824 이다.)
#include <stdio.h>
int main()
{
long long int a, b;
scanf("%d %d", &a, &b);
printf("%d", a+b);
return 0;
}
#include <stdio.h>
int main()
{
long long int a, b;
scanf("%lld %lld", &a, &b);
printf("%lld", a+b);
return 0;
}
단, 입력되는 정수는 -2147483648 ~ +2147483648 이다.
#include <stdio.h>
int main()
{
long long int a, b;
scanf("%lld %lld", &a, &b);
printf("%lld", a+b);
return 0;
}
단, -2147483647 ~ +2147483647 범위의 정수가 입력된다.
#include <stdio.h>
int main()
{
long long int a;
scanf("%lld", &a);
printf("%lld", -a);
return 0;
}
영문자 'A'의 다음 문자는 'B'이고, 영문자 '0'의 다음 문자는 '1'이다.
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%c", a+1);
return 0;
}
숫자로 받아서 %d로 출력하면 숫자로, 숫자로 받아서 %c로 출력하면 문자로 출력한다는 전제조건이 있음. 그러므로 내가 작성했던 코드가 아예 틀린 말은 아니라는 뜻임.
숫자를 받아서 %c로 문자를 출력되도록 하는 것은 잘 작동함. 하지만 문자를 입력받도록 설정된 1041번은 int a에 문자가 저장되었으므로 이상한 답이 나왔던 것임.
입력받는 게 '영문자'이므로 a의 타입을 char로 바꿔줘야 함.
단, -2147483648 <= a <= b <= +2147483647, b는 0이 아니다.
#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d", a/b);
return 0;
}
정답 여부: O
해설?: 문제에 참고로 뭐라뭐라 써있길래 더 읽어봤음.
우선 정수/정수
의 값은 정수로 나옴.
하지만 실수/정수
, 정수/실수
, (float)정수/정수
, 정수/(float)정수
처럼 한 쪽이 실수인 경우는 값이 실수로 나옴.
정수/실수 계산결과가 자동으로 실수형으로 바뀌는 것을 묵시적 (데이터)형변환이라고 하고,
어떤 값이나 결과의 데이터형을 강제로 바꾸는 것을 명시적 (데이터)형변환이라고 한다.
상황에 따라서 명시적 형변환이 필요한듯 함.
단, 0 <= a, b <= +2147483647, b는 0이 아니다.
#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d", a%b);
return 0;
}
단, -2147483648 ~ +2147483647 의 범위로 입력된다.
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%d", a+1);
return 0;
}
만약 int의 끝 범위인 +2147483647가 입력된다고 했을 때 결과가 +2147483648로 int의 범위를 초과해버리므로 %d가 아닌 %lld를 사용해줘야 함.
#include <stdio.h>
int main()
{
long long int a;
scanf("%lld", &a);
printf("%lld", a+1);
return 0;
}
안되는 걸 보면 범위문제는 예민하게 반응해서 확실히 맞춰줘야 하는 듯.
단 0 <= a, b <= 2147483647, b는 0이 아니다.
첫 줄에 합
둘째 줄에 차,
셋째 줄에 곱,
넷째 줄에 몫,
다섯째 줄에 나머지,
여섯째 줄에 나눈 값을 순서대로 출력한다.
(실수, 소수점 이하 셋째 자리에서 반올림해 둘째 자리까지 출력)
#include <stdio.h>
int main()
{
long long int a, b;
scanf("%lld %lld", &a, &b);
printf("%lld\n%lld\n%lld\n%lld\n%lld\n%lld", a+b, a-b, a*b, a/b, a%b, (float)(a/b));
}
서식 지정자: 명시적 형변환을 통해 실수로 변환했지만 서식 지정자는 %f가 아닌 %lld로 되어있음.
명시적 (데이터)형변환: (float)(a/b)
는 a/b의 값을 실수로 변환한다는 뜻이므로 소수자리에 값이 오도록 하고 싶다면 (float)a/b
로 한 쪽만 실수로 바꿔줘야 함.
그리고 반올림해 둘째 자리까지 출력하라고 했으므로 %0.2f로 바꿔줘야 함.
#include <stdio.h>
int main()
{
long long int a, b;
scanf("%lld %lld", &a, &b);
printf("%lld\n%lld\n%lld\n%lld\n%lld\n%0.2f", a+b, a-b, a*b, a/b, a%b, (float)a/b);
return 0;
}
단, -2147483648 ~ +2147483647
#include <stdio.h>
int main()
{
long long int a, b, c;
scanf("%lld %lld %lld", &a, &b, &c);
printf("%lld %0.1f", a+b+c, ((float)(a)+b+c)/3);
return 0;
}
1) 중간에 강의도 찾아봤는데 도움이 많이 됐음.
막상 설명하라고 하면 어떻게 설명해야 할지 감이 안 잡히는데 강의에서는 딱 해결해버리니깐 유용할 것 같기도 하면서 조금 허무해지기도 함.