백준 11720번 문자열 by 꽁치

  함수를 끝내고 문자열로 들어갔다. 이번 문제는 숫자의 합 구하기. 

<숫자의 합>

  N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오. (1<=N<=100)

  이므로.. 100째자리 수까지 담을 수 있어야 한다. 

처음 이문제 보고 이게 왜 문자열이지 하고 long long에 담아 풀었는데 자꾸 틀렸다고 해서.. 영상을 찾아보고 터득함. 
아스키코드 표가 있으면 쉽게 풀 수 있는 문제이다. 

long long은 int 보다 긴 8비트이긴 하지만, 100째자리를 담는 데엔 턱없다. 다음 사진을 보면 이해가 빠름.

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<string>
using namespace std;
int main(){
int num1;
int sum = 0;
string s;
cin >> num1 >> s;

for(int i =0;i<num1;i++){
sum += (s[i] - '0');

}
printf("%d", sum);
return 0;


}




C 표준 데이터형과 그 표현 범위
 따라서 char형태로 string에 담는 방법을 선택함. 
1) #include<string> 선언해주고, 
2) std를 선언해야한다. (using namespace하면 안해도됨)
3) string s; 형태이다. 
4)S[1] = string의 첫번째원소 , 배열과 비슷하게 쓰인다. 

이 문제에서 중요한 포인트 하나 더는 string에 입력받은 숫자는 char, 즉 문자열 형태로 들어오므로, 문자를 숫자로 바꿔줘야 한다. 

자바는.. 자동으로 바뀌거나 명령어 하나면 되지만, c++은 아스키코드를 활용해야 한다. 
아스키코드 표를 보면 0= 48이므로.. (문자 N = 어떤 아스키코드 숫자) -( 문자 0 =48) = 숫자 N이 나온다. 

해서.. sum 변수에 계속 숫자로 바꿔준 s[i]를 더해주면된다.


다음은.. 그냥 long long써서 해보려 했던 코드.. 





 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
int main(){
int num1;
long long num2;
long long sum =0;
int arr[100000] ={};
scanf("%d",&num1);
scanf("%lld",&num2);
for(int i =0;i<num1;i++){
while(num2!=0){
arr[i] = num2%10;
num2 = num2/10;
}
sum += arr[i];

}
printf("%lld",sum);

}



덧글

댓글 입력 영역