코드 질문있어요

조회수 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에 더해주면 됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)