728x90

나이계산

 

주민등록증의 번호가 주어지면 주민등록증 주인의 나이와 성별을 판단하여 출력하는 프로그램 을 작성하세요. 주민등록증의 번호는 -를 기준으로 앞자리와 뒷자리로 구분된다. 뒷자리의 첫 번째 수가 1이면 1900년대생 남자이고, 2이면 1900년대생 여자, 3이면 2000년대 생 남자, 4이면 2000년대생 여자이다. 올해는 2019년입니다. 해당 주민등록증 주인의 나이와 성별을 출력하세요.

 

▣ 입력설명 첫 줄에 주민등록증 번호가 입력됩니다.

 

▣ 출력설명 첫 줄에 나이와 성별을 공백을 구분으로 출력하세요.

성별은 남자는 M(man), 여자는 W(Woman)로 출력한다.

 

▣ 입력예제 1

780316-2376152

 

▣ 출력예제 1

42 W

 

▣ 입력예제 2

061102-3575393

 

▣ 출력예제 2

14 M

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	// freopen("test.txt", "rt", stdin);
	char a[20];
	int year, age;
	scanf("%s", &a);
	if (a[7] == '1' || a[7] == '2')
		year = 1900 + ((a[0] - '0') * 10 + (a[1] - '0'));
	else year = 2000 + ((a[0] - '0') * 10 + (a[1] - '0'));

	age = 2020 - year + 1;

	printf("%d ", age);
	if (a[7] == '1' || a[7] == '3') printf("M\n");
	else printf("W\n");

	return 0;
}

 

char 타입을 int 타입처럼 사용하기 위해서는 아스키 코드에 대한 이해가 있어야합니다.

문자 '0' 은 아스키코드 48번입니다. 123456-1234567 주민등록번호의 배열의 7번째가

출생년도와 남자와 여자를 구분하는 key 이기 때문에 if 문에서 a[7] 로 비교를 하고

주민등록번호 0 번째와 1번째 문자열을 가져와 나이를 구합니다.

 

95년생일경우 a[0] 은 9 이고 a[1] 은 5입니다 a[0] 에 * 10 을하면 90 이 아니라 아스키값 * 10을 해서 엉뚱한 값이 나와버리게 됩니다. 

 

a[0] - 48 을 하고 * 10을 해도 되지만 더 직관적으로 (a[0] - '0') * 10을 했습니다. 

728x90