#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 |