티스토리 뷰

알고리즘/C++

자릿수의 합 C++

지휘리릭 2020. 2. 19. 17:49

N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력하는 프로그램을 작성하세요.  

같은 값이 나온다면 기존 값이 큰 자연수를 출력하시오.

 

애초에 자연수를 인티저로 받는다면 자릿수의 합을 구하는 것은 어렵지만, 원래의 수를 바로 알 수 있어서 편하다.

하지만 자연수를 캐릭터 배열로 받는다면 자릿수의 함을 구하는 것은 쉽지만, 원래의 수를 바로 알기가 어렵다.

 

1. 자연수를 캐릭터 배열로 받은 경우

#include<stdio.h>

int main() {
	int n, max = -2147000000, sum, ans, temp;
	char val[9];
	int i, j;
	scanf("%d", &n);
	for (i = 0; i < n; i++) {
		sum = 0; temp = 0;
		scanf("%s", &val);
		for (j = 0; val[j] != '\0'; j++) {
			sum = sum + (val[j] - 48);
			temp = (temp * 10) + (val[j] - 48);
		}
		if (max < sum) {
			max = sum;
			ans = temp;
		}
		else if (max == sum) {
			if (ans < temp) ans = temp;
		}
	}
	printf("%d", ans);
}

 

 

2. 자연수를 인티저 값으로 받은 경우

#include<stdio.h>

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

int main() {
	int n, num, sum, res;
	int max = -2147000000;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &num);
		sum = digit_sum(num);
		if (max < sum) {
			max = sum;
			res = num;
		}
		else if (max == sum) {
			res = (num > res ? num : res);
		}
	}
	printf("%d", res);
}
댓글