✔️문제
- 입력된 수의 각 자릿수 합을 구하시오
- 1242
- 정답: 9
✔️정답
package _09_sumOfDigits;
public class Main {
public static void main(String[] args) {
int inputNum = 1242; // 1 + 2 + 4 + 2 = 9
int sum = 0;
// int를 String으로 변환
String str = Integer.toString(inputNum);
// 각 자리 숫자를 더함
for (int i = 0; i < str.length(); i++) {
sum += str.charAt(i) - '0'; // char를 int로 변환 -> 문자 '0'을 빼서 숫자로 변환
// sum += Integer.parseInt(String.valueOf(str.charAt(i)));
}
// 출력
System.out.println(inputNum + "의 각 자리 숫자의 합은 " + sum);
}
}
※ '0'을 빼는 이유
더보기
1. 문자(char)와 숫자(int)의 차이
- Java에서 숫자 1과 문자 '1'은 다르게 취급됨.
- 숫자 1 (int 타입) → 그냥 1
- 문자 '1' (char 타입) → '1'이라는 기호
다음과 같이 정수를 문자열로 변환한 후 개별 문자를 가져올 수 있음
String str = "1242";
char ch = str.charAt(0); // '1'
- 이때 ch는 숫자 1이 아니라 문자 '1'
2. 문자도 내부적으로 숫자로 저장됨 (ASCII 코드)
컴퓨터는 문자를 ASCII 코드 값으로 저장
문자 | ASCII 코드 값 |
'0' | 48 |
'1' | 49 |
'2' | 50 |
'3' | 51 |
'4' | 52 |
- 문자 '1'은 숫자 49로 저장되고, '0'은 48로 저장
3. '1' - '0'의 원리
문자에서 숫자를 추출할 때 '0'을 빼면 실제 숫자가 됨
char ch = '1';
int num = ch - '0';
이 코드에서
- '1'의 ASCII 값 = 49
- '0'의 ASCII 값 = 48
- 따라서 '1' - '0' = 49 - 48 = 1
같은 방식으로
'2' - '0' = 50 - 48 = 2
'3' - '0' = 51 - 48 = 3
'4' - '0' = 52 - 48 = 4
정리
✅ 문자 '0'의 ASCII 값(48)을 빼주면 '0' ~ '9'를 숫자로 변환 가능
✅ '1' - '0' = 1, '2' - '0' = 2 같은 방식으로 변환하면 쉽고 빠름
package _09_sumOfDigits;
public class Main_Division {
public static void main(String[] args) {
int inputNum = 1232;
int accNum = 0; // 각자리 숫자합 변수
// 1232 => 123 => 12 => 1 (10으로 나누고 몫)
// 2 3 2 1 (10으로 나누고 나머지) => 8
while (inputNum > 0) {
accNum += inputNum % 10;
inputNum /= 10;
}
System.out.print(accNum);
}
}
문자열을 더할때는 반복문으로 char로 만듬 -> str.charAt(i)-'0'
아스키코드65 -> 'A' | 아스키코드48 -> '0'
'개발인생 > Altorithm' 카테고리의 다른 글
[알고리즘 기초 100제] 11. 숫자 개수 출력 (0) | 2025.03.11 |
---|---|
[알고리즘 기초 100제] 10. 숫자 사각형(1)~(4) (1) | 2025.03.11 |
[알고리즘 기초 100제] 8. 팩토리얼 (0) | 2025.03.10 |
[알고리즘 기초 100제] 7. 소수 판별 (1) | 2025.03.09 |
[알고리즘 기초 100제] 6. 최대공약수 구하기 (0) | 2025.03.09 |