코드 질문있어요
조회수 415회
https://www.acmicpc.net/problem/11720 백준 문제 풀고있는데
#include<stdio.h>
int main()
{
unsigned int n, a, sum = 0;
scanf("%d", &n);
scanf("%d", &a);
for (int i = 0; i < n; i++)
{
if (a == 10)
{
sum += 1;
}
else if (a != 10)
{
sum += a % 10;
a = a / 10;
}
}
printf("%d", sum);
}
이거 숫자 개수가 9개 이하면 정상적으로 작동하는데 10개 넘어가고 0이 섞여있으면 결과가 어쩔땐 이상하게 나오고 어쩔때는 또 정상적으로 나옵니다. 이상해요....
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
unsigned int형 변수에 저장가능한 숫자의 범위는 0~약 42억(10자리)까지 입니다. 42억을 넘는 숫자는 unsigned int형 변수에 저장할 수 없고, 저장하게 되면 범위를 초과하는 상위비트를 변수내에 저장하지 못한채 나머지 비트들만 저장하는 오버플로우가 발생되어 변수는 결국 엉뚱한 값을 갖게 됩니다.
최대 100자리의 숫자를 저장할 수 있는 자료형은 없으니까, a를 unsigned int와 같은 일반 자료형이 아니고 문자열 형태로 받아서 처리를 해야 합니다.
int n, sum=0; char a[101]; scanf("%d", &n); scanf("%s", a);
위와 같이 받은 후에 a의 n개의 칸을 숫자로 변환하여 sum에 더해주면 됩니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력