89번, 90번 모두 다른 숫자를 넣었을 때는 되는데 마지막 10 10 10을 넣으면 답이 이상하게 나와요ㅠㅠㅠ
89번
#include<stdio.h>
int main()
{
int a;
int r;
int n;
scanf("%d %d %d", &a, &r, &n);
for (int i=0; i<n-1; ++i)
{
a = a*r;
}
printf("%d", a);
return 0;
}
90번
#include<stdio.h>
int main()
{
int a;
int m;
int d;
int n;
scanf("%d %d %d %d", &a, &m, &d, &n);
for(int i=0; i<n-1; ++i)
{
a = a*m+d;
}
printf("%d", a);
return 0;
}
댓글 2
-
InformaticsTeacher
2025.08.16 18:06
-
InformaticsTeacher
2025.08.16 18:13
int보다 더 큰 자료형인 long long int를 활용할 수. 있습니다. 이 때는 %d 대신 모두 %lld 로 수정하면 됩니다.
가능함녀 C도 좋지만 C++로 cin, cout도 학습해보기를 추천합니다.
문제의 원인은
int자료형 범위 초과(overflow) 때문입니다.C 언어에서
int는 보통 32비트 정수로, 표현 가능한 범위는 약-2,147,483,648 ~ 2,147,483,647 입니다.
제시한 입력
10 10 10의 경우를 계산해 보면:a = 10 (시작값) r = 10 (등비) n = 10 (몇 번째 수) 계산: 10 × 10^(10-1) = 10 × 10^9 = 10^10 = 10,000,000,000그런데 10,000,000,000 > 2,147,483,647 이므로,
int에 저장할 수 없고, 값이 범위를 넘어가면서 잘못된(음수거나 엉뚱한) 값이 나옵니다.