728x90
반응형
문제
N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력 하는 프로그램을 작성하세요.
각 자연수의 자릿수의 합을 구하는 함수를 int digit_sum(int x)를 꼭 작성해서 프로그래밍 하세요.
▣ 입력설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.
각 자연수의 크기는 10,000,000를 넘지 않는다.
▣ 출력설명
자릿수의 합이 최대인 자연수를 출력한다.
자리수의 합이 최대인 자연수가 여러개인 경우 그 중 값이 가장 큰 값을 출력합니다.
입력 예제
5
125 15232 79 1325 97
출력 예제
97
풀이
#include<stdio.h>
using namespace std;
int digit_sum(int x){
int sum=0,tmp;
while(x>0){
tmp=x%10;
sum+=tmp;
x=x/10;
}
return sum;
}
int main(){
// 자릿수의 합
int n, num, i, sum, max=-2147000000, res;
scanf("%d",&n);
for(i=0 ; a < n ; i++){
scanf("%d", &num);
sum = digit_sum(num);
if(sum > max) {
max=sum;
res=num;
}
else if(sum==max){
if(num > res) res=num;
}
printf("%d\n",res);
}
return 0;
}
각 n개의 자연수 개수만큼 digit_sum 함수를 실행시킨다. 각 자연수의 자릿수 구하기 위해 자연수 x를 10으로 나누어 떨어진 나머지 값은 자연수의 맨 끝값이 되니 tmp에 저장하고 sum에 더해준다.
x값은 10으로 나눈 값으로 셋팅하면 맨 끝값을 뺀 나머지 자릿수로 저장되어 진다. 다시 x값을 10으로 나눈 나머지를 tmp에 저장하고 sum에 더해준다.. 이렇게 x값이 0이 될때 까지 반복하면 자연수의 자릿수를 모두 더한 값 sum을 구할 수 있다.
n % 10 = n의 맨 끝 자릿수
n / 10 = n의 맨 끝 자릿수를 뺀 나머지 자릿수
가장 큰 값은 int형 중 가장 작은 값인 -2174000000 값과 비교해서 더 크면 max로 셋팅한다. 이렇게 sum을 비교하여 max를 저장하고, 원래 자연수값은 num에 저장한다.
sum이 같을 경우 원래 자연수 값 num을 비교하면 되니 자릿수의 합이 가장 큰 값을 구할 수 있다.
반응형
'IT_study > Coding test' 카테고리의 다른 글
[Coding test Basic with c++] N!의 표현법 (0) | 2021.12.27 |
---|---|
[Coding test Basic with c++] Anagram(아나그램 : 구글 인터뷰 문제) (0) | 2021.12.25 |
[Coding test Basic with c++] 모두의 약수 (0) | 2021.12.21 |
[Coding test Basic with c++] 올바른 괄호 (0) | 2021.12.16 |
[Coding test Basic with c++] 영어단어 복구 (0) | 2021.12.16 |