#include #include #include #include const int girlIdent = 50; int year; int month; int day; int suffix; unsigned long long all; void check(char* num); int main(void){ char c; int i = 0; char pid[21]; //personal id memset(pid, '\0', sizeof(pid)); while((c = getchar()) != EOF){ if(c != '\n'){ pid[i++] = c; } else { i = 0; check(pid); memset(pid, '\0', sizeof(pid)); all = 0; year = 0; month = 0; day = 0; suffix = 0; } } return 0; } void check(char* num){ char tmp[30]; if(strcmp(num, "end") == 0){ exit(0); } for(int i = 0; i <= 5; i++){ if(!isdigit(num[i])){ printf("invalid\n"); return; } } year = (num[0] - '0') * 10 + (num[1] - '0'); month = (num[2] - '0') * 10 + (num[3] - '0'); day = (num[4] - '0') * 10 + (num[5] - '0'); if(!(((month >= 1) && (month <= 12)) || ((month >= 51) && (month <= 62)))){ printf("invalid\n"); return; } if((day < 1) || (day > 31)){ printf("invalid\n"); return; } else { switch (month) { case 1: case 51: case 3: case 53: case 5: case 55: case 7: case 57: case 8: case 58: case 10: case 60: case 12: case 62: break; case 2: case 52: /* if (!(day == 28 || day == 29)) { printf("invalid\n"); return; }*/ if (day == 29) { if (!( ((year%4==0)&&(year%100!=0)) || ((year%400)==0) )) { printf("invalid\n"); return; } } else if (day > 29){ printf("invalid\n"); return; } break; default: if (day != 30) { printf("invalid\n"); return; } } } if(num[6] != '/'){ printf("invalid\n"); return; } if(!isdigit(num[7])){ printf("invalid\n"); return; } if(!isdigit(num[8])){ printf("invalid\n"); return; } if(!isdigit(num[9])){ printf("invalid\n"); return; } memset(tmp, '\0', sizeof(tmp)); if(num[10] == '\0'){ suffix += (num[7] - '0') * 100; suffix += (num[8] - '0') * 10; suffix += (num[9] - '0'); /*all += suffix; all += day * 1000; all += month * 100000; all += year * 10000000;*/ sprintf(tmp, "%02d%02d%02d%04d", year, month, day, suffix); if (year >= 1954) { printf("invalid\n"); return; } all = (unsigned long long)atof(tmp); if((all % 11) != 0){ printf("invalid\n"); return; } } else { suffix += (num[7] - '0') * 1000; suffix += (num[8] - '0') * 100; suffix += (num[9] - '0') * 10; suffix += (num[10] - '0'); /*all += suffix; all += day * 10000; all += month * 1000000; all += year * 100000000;*/ sprintf(tmp, "%02d%02d%02d%04d", year, month, day, suffix); if (year < 54 && year > 9) { printf("invalid\n"); return; } all = (unsigned long long)atof(tmp); if((all % 11) != 0){ printf("invalid\n"); return; } } if ( year < 20 && year > 9 ) { printf("invalid\n"); return; } if (month > 50) { printf("girl\n"); return; } else { printf("boy\n"); return; } // printf("%d\n", all); // printf("%d%d%d/%d\n%d\n\n",year, month, day, suffix, all); // printf("%s\n%f.0\n\n", tmp, ); //printf("** %s\n", num); }