fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. char s(char mo[10],int k);
  5. int day(int m,int inp,int plus,int year);
  6. int temp(int y);
  7. const char month[12][10]= {"January","February","March","April","May","June","July","August","September","October","November","December"};
  8. int fin,fin_year;
  9. int main()
  10. {
  11. int times,i,k,date,years,plus_days,num,j;
  12. char mon[10];
  13. while(scanf("%d",&times)!=EOF)
  14. {
  15. num=0;
  16. while(times--)
  17. {
  18. num++;
  19. memset(mon,' ',sizeof(mon));
  20. scanf("%d-",&years);
  21. for(i=0;; i++)
  22. {
  23. scanf("%c",&mon[i]);
  24. if(mon[i]=='-')
  25. {
  26. mon[i]='\0';
  27. break;
  28. }
  29. }
  30. scanf("%d",&date);
  31. scanf("%d",&plus_days);
  32. k=strlen(mon);
  33. i=s(mon,k);
  34. j=day(i,date,plus_days,years);
  35. printf("Case %d: %d-%s-%02d\n",num,fin_year,month[fin],j);
  36. }
  37. }
  38. return 0;
  39. }
  40. char s(char mo[10],int k)
  41. {
  42. int a=0,i,l,len=0;
  43. for(i=0; i<12; i++)
  44. {
  45. for(l=0; l<k; l++)
  46. {
  47. if(mo[l]==month[i][l])
  48. { len++;
  49. if(len==k){
  50. a=i+1;
  51. }
  52. }
  53. else
  54. {
  55. break;
  56. }
  57. }
  58. }
  59. return a;
  60. }
  61. int temp(int y)
  62. {
  63. if(y%400==0)
  64. {
  65. return 1;
  66. }
  67. else if(y%100==0)
  68. {
  69. return 0;
  70. }
  71. else if(y%4==0)
  72. {
  73. return 1;
  74. }
  75. else
  76. {
  77. return 0;
  78. }
  79. }
  80. int day(int m,int inp,int plus,int year)
  81. {
  82. int i;
  83. if(m<=7)
  84. {
  85. if(m%2)
  86. {
  87. inp=inp+plus;
  88. if(inp>31)
  89. {
  90. return day(m+1,1,inp-32,year);
  91. }
  92. else
  93. {
  94. fin=m-1;
  95. fin_year=year;
  96. return inp;
  97. }
  98. }
  99. else if(m==2)
  100. {
  101. inp=inp+plus;
  102. i=temp(year);
  103. if(i==1)
  104. {
  105. if(inp>29)
  106. {
  107. return day(m+1,1,inp-30,year);
  108. }
  109. else
  110. {
  111. fin=m-1;
  112. fin_year=year;
  113. return inp;
  114. }
  115. }
  116. else if(i==0)
  117. {
  118. if(inp>28)
  119. {
  120. return day(m+1,1,inp-29,year);
  121. }
  122. else
  123. {
  124. fin=m-1;
  125. fin_year=year;
  126. return inp;
  127. }
  128. }
  129. }
  130. else
  131. {
  132. inp=inp+plus;
  133. if(inp>30)
  134. {
  135. return day(m+1,1,inp-31,year);
  136. }
  137. else
  138. {
  139. fin=m-1;
  140. fin_year=year;
  141. return inp;
  142. }
  143. }
  144. }
  145. else if(m>=8)
  146. {
  147. if(m%2==0&&m!=12)
  148. {
  149. inp=inp+plus;
  150. if(inp>31)
  151. {
  152. return day(m+1,1,inp-32,year);
  153. }
  154. else
  155. {
  156. fin=m-1;
  157. fin_year=year;
  158. return inp;
  159. }
  160. }
  161. else if(m==12)
  162. {
  163. inp=inp+plus;
  164. if(inp>31)
  165. {
  166. year++;
  167. return day(1,1,inp-32,year);
  168. }
  169. else
  170. {
  171. fin=m-1;
  172. fin_year=year;
  173. return inp;
  174. }
  175. }
  176. else
  177. {
  178. inp=inp+plus;
  179. if(inp>30)
  180. {
  181. return day(m+1,1,inp-31,year);
  182. }
  183. else
  184. {
  185. fin=m-1;
  186. fin_year=year;
  187. return inp;
  188. }
  189. }
  190. }
  191. }
  192.  
Success #stdin #stdout 0.01s 5288KB
stdin
12
1987-January-30
30
1987-February-27
30
1987-March-14
9999
2014-April-30
9999
1987-May-13
9999
1888-June-30
9999
1888-July-30
9999
1888-August-30
9999
1888-September-30
9999
1888-October-30
9999
1888-November-30
9999
1888-December-30
9999
stdout
Case 1: 1987-March-01
Case 2: 1987-March-29
Case 3: 2014-July-29
Case 4: 2041-September-14
Case 5: 2014-September-27
Case 6: 1915-November-16
Case 7: 1915-December-16
Case 8: 1916-January-16
Case 9: 1916-February-16
Case 10: 1916-March-17
Case 11: 1916-April-17
Case 12: 1916-May-17