본문 바로가기
알고리즘!/백준 CLASS1

[C] 11720: 숫자의 합

by soeayun 2023. 7. 8.
#include <stdio.h>
#include <string.h>

int main(void)
{
  int n;
  scanf("%d",&n);
  int add=0;
  char k[100]; //입력값이 10^100까지 오기 때문에 int형으로 받을 수가 없음
  scanf("%s",k);
  
  for(int i=0;i<n;i++)
    {
      add+=(k[i]-48)%10; //0의 아스키코드가 48인걸 이용해야함
      
    }

  printf("%d",add);
    
 
}

위와 같이 둘째줄에 숫자를 받을때 수의 범위가 10^100까지 넘어간다.

int형의 범위는 -2,147,483,647~2,147,483,647이므로 받을 수 없고

unsigned long long int도 0~18,446,744,073,709,551,615이므로 주어진 범위를 받을 수 없다

 

그렇기 때문에 int형이 아닌 각 숫자를 문자로 보고 배열로 저장해야하며문자로 받았기 때문에 아스키코드와 나머지를 이용해 총 합을 구해야한다.특히 입력이 띄어쓰기가 되어있지 않으므로 나머지를 구해야함을 주의해야한다

 

밑에 소스코드는 입력값의 범위가 int형 이내일때 만족하는 코드이다.위 코드와 아래 코드를 비교해서 확인해보면 이해하기 쉬울 것이다

#include <stdio.h>
#include <string.h>

int main(void)
{
  int n;
  scanf("%d",&n);
  int add=0;
  int k;
  scanf("%d",&k);
  for(int i=0;i<n;i++)
    {
      add+=k%10;
      k/=10;
    }

  printf("%d",add);
    
 
}

'알고리즘! > 백준 CLASS1' 카테고리의 다른 글

2884: 알람 시계  (0) 2023.07.08
10250: ACM 호텔  (0) 2023.07.08
1157: 단어공부  (0) 2023.07.08
2675: 문자열 반복  (0) 2023.07.07
2577: 숫자의 개수  (0) 2023.07.07