알고리즘/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);
}