Hi! I’ve recently started learning C and I’ve been getting stuck on the basic tasks cuz I keep overcomplicating them T-T Could anyone please help me with this specific task?
Problem Statement
You have a digit sequence S of length 4. You are wondering which of the following formats S is in:
- YYMM format: the last two digits of the year and the two-digit representation of the month (example:
01for January), concatenated in this order - MMYY format: the two-digit representation of the month and the last two digits of the year, concatenated in this order
If S is valid in only YYMM format, print YYMM; if S is valid in only MMYY format, print MMYY; if S is valid in both formats, print AMBIGUOUS; if S is valid in neither format, print NA.
Constraints
- S is a digit sequence of length 4.
Sample Input 1
1905
Sample Output 1
YYMM
May XX19 is a valid date, but 19 is not valid as a month. Thus, this string is only valid in YYMM format.
Sample Input 2
0112
Sample 2
AMBIGUOUS
Both December XX01 and January XX12 are valid dates. Thus, this string is valid in both formats.
Sample Input 3
1700
Sample Output 3
NA
Neither 0 nor 17 is valid as a month. Thus, this string is valid in neither format.
The code I wrote for this is:
#include <stdio.h>
int main(){
int S;
scanf("%d", &S);
int p1 = S/100;
int p2 = S%100;
if (p1!=0 && p1<=12){
if(p2!=0 && p2<=12){
printf("AMBIGUOUS");
}
else if (p2>=13){
printf("MMYY");
}
else{
printf("NA");
}
}
else if (p1>=13){
if(p2!=0 && p2<=12){
printf("YYMM");
}
else {
printf("NA");
}
}
return 0;
}
It passed the 7 checks in the system, but failed on the 8th and I have no idea what kind of values are on the 8th check… Thanks to anyone for reading this far!


'0'..'9'(characters in ASCII) are(0+48)..(9+48)when read as integer values.For readability you can do:
unsigned char zero = '0'; int h = getchar() - zero; int l = getchar() - zero;And as I mentioned in another comment, if this was serious code, you would check that both
handlare between0and9.Note that one of the stupid quirks about C is that
charis not guaranteed to be unsigned in certain implementations/architectures. So it’s better to be explicit about expecting unsigned values. This is also whyman 3 getcharstates:Ohhh, that makes sense! Thank you for explaining!