2014-10-13 11 views
1

어떻게 사년에 다음과 같은 형식의 2 자리 연도로 변환합니다 : 등변환이 자리 매년 숫자 4

02 -> 2002 
87 -> 1987 

...

내가 무엇을 가지고 지금까지 :

char shortYr[3]; 
char longYr[5]; 
scanf("%2s", shortYr); 
int shortYrAsInt = atoi(shortYr); 

if (shortYrAsInt < 99) 
    ; 

어떻게 변환합니까? 인터넷에서 4 자리 숫자를 2 자리 숫자로 변환하는 방법에 대해 읽었는데, 이는 쉽지만 다른 방법은 무엇입니까?

+2

20xx 또는 19xx의 제한은 무엇입니까? 예를 들어 50의 출력은 얼마입니까? 1950 년 또는 2050 년 –

답변

1
int longYear; 
if (shortYrAsInt <= 15) { // this should be the number where you think it stops to be 20xx (like 15 for 2015; for every number after that it will be 19xx) 
    longYear = shortYrAsInt + 2000; 
} else { 
    longYear = shortYrAsInt + 1900; 
} 
0

실제로 "변환 중"이 아니며 더 많은 "해석 중"을 달성하려고하지는 않습니다.

  • 당신은 당신의 정수에 추가 그런 다음 휴리스틱을 정수
  • 에 문자열 표현을 변환 atoi 필요합니다
    • 2000 2 개 자리는 경우
    • 또는 190000 사이 14 그렇지 않으면. 당신은 단지 문자를 사용하려면
0

는 :

if (shortYrAsInt < 15) { // The number where it stops being 20xx 
    sprintf(longYr, "20%s", shortYr); 
} 
else { 
    sprintf(longYr, "19%s", shortYr); 
} 
0

나는 (JS로 작성)이 같은 일이 잘 작동 생각 :

if(year >= 0 && year < 100) { 
    const now = new Date(); 
    const fullYear = now.getFullYear(); 
    let shortYear = fullYear % 100; 
    let m1 = fullYear - shortYear; 
    let m2 = m1 - 100; 

    let opt1 = year + m1; 
    let opt2 = year + m2; 

    year = Math.abs(fullYear - opt1) < Math.abs(fullYear - opt2) ? opt1 : opt2; 
} 

즉, 그것은 선택할 것 현재 년도 인 19XX 또는 20XX에 가까운 쪽.

관련 문제