본문 바로가기

문제풀이/C++

[C++] 자릿수의 합

728x90

[목적]

입력 하고 싶은 개수를 먼저 입력 한 후, 해당 개수만큼 숫자를 입력받아 각 숫자들의 자릿수를 더해 가장 큰 합이 나온 숫자를 출력한다.

단, 자릿수를 더한 값이 가장 큰 숫자가 여럿일 경우 숫자 중 가장 큰 수를 출력한다.

 

[입력예제]

5
125 15232 79 1325 97

 

[출력예제]

97

 

5개를 입력받고 나면 그 중 자릿수 합이 가장 큰 숫자를 찾는다.

자릿수 합이 가장 큰 숫자는 '79'와 '97'이다.

이 두 수 중 더 큰 수는 '97'이기에 '97'을 출력한다.


[코드]

#include <iostream>

using namespace std;

//자릿수를 더하는 함수  
int digit_sum(int x){
	
    int num = 0;
    //받아온 x(i)와 10을 나눈 나머지를 num에 저장 후 x(i)의 일의자리 수를 없앤다. 
    for(int i=x; i>0; i/=10) num+=i%10;
	
    return num;
}

int main(void) {
    
    int num, arr, res, max=-2147000000, temp=0;
	
    cin >> num;
	
    for(int i=0; i<num; i++){
        cin >> arr;
        //자릿수를 더하는 함수로 입력받은 값 전송  
        res = digit_sum(arr);
        //자릿수를 더한값이 가장 큰 입력값 저장  
        if(res>max){
            max = res;
            temp = arr;
        }
        //자릿수를 더한값이 같을 경우 숫자가 더 큰 입력값 저장 
        else if(res == max){
            if(temp < arr)
                temp = arr;
        }
    }
    cout << temp;	

    return 0;
}

digit_sum함수는 각 자릿수를 더하는 함수이다.

해당 함수에서의 for문은 while문으로 아래와 같이 변경 가능하다.

int digit_sum(int x){
    int tmp, sum=0;
    while(x>0){
        tmp=x%10;
        sum+=tmp;
        x=x/10;
    }
    return sum;
}

1. 자릿수를 더한 값을 받은 후 max(최대값)와 비교하여 max보다 더 클 경우 max에 자릿수의 합을 넣어준다.

2. 출력해야 되는 것은 각 자릿수의 합이 아닌 입력한 숫자이기에 입력한 숫자를 temp에 저장해 준다.

3. 최대값과 자릿수를 더한 값이 같다면 입력받은 숫자와 temp에 저장된 입력받은 숫자를 비교하여 더 큰 숫자를 temp에 저장해 준다.

4. 비교가 끝난 후 temp를 출력한다.

 

[실행 결과]

728x90
반응형

'문제풀이 > C++' 카테고리의 다른 글

[C++] 가장 많이 사용된 자릿수  (0) 2020.12.29
[C++] 숫자의 총 개수 (small)  (0) 2020.12.29
[C++] 모두의 약수  (0) 2020.12.27
[C++] 올바른 괄호  (0) 2020.12.27
[C++] 영어단어 복구  (0) 2020.12.27