fork(1) download
  1. #include <stdio.h>
  2.  
  3. int is_uruu(int year){
  4. if(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)){
  5. return 1;
  6. }
  7. return 0;
  8. }
  9.  
  10. int maxday_of_month(int y, int m){
  11. if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12){
  12. return 31;
  13. }
  14. else if(m==4 || m==6 || m==9 || m==11){
  15. return 30;
  16. }
  17. else if(m == 2 && is_uruu(y) == 1){
  18. return 29;
  19. }
  20. else{
  21. return 28;
  22. }
  23. }
  24.  
  25. int days_from(int y, int m, int d){
  26. int ans=0, i;
  27. for(i=1;i<=m-1;i++){
  28. ans += maxday_of_month(y,i);
  29. }
  30. ans--;
  31. ans += d;
  32. return ans;
  33. }
  34.  
  35. int days_from_1900_1_1(int y, int m, int d){
  36. int ans=0, i;
  37. for(i=1900;i<=y-1;i++){
  38. ans += days_from(i,12,31) + 1;
  39. }
  40. ans += days_from(y,m,d);
  41. return ans;
  42. }
  43.  
  44. int what_day(int y, int m, int d){
  45. switch(days_from_1900_1_1(y,m,d)%7){
  46. case 0:
  47. return 1;
  48. //月曜
  49. case 1:
  50. return 2;
  51. case 2:
  52. return 3;
  53. case 3:
  54. return 4;
  55. case 4:
  56. return 5;
  57. case 5:
  58. return 6;
  59. case 6:
  60. return 0;
  61. }
  62. }
  63.  
  64. void calendar(int y, int m){
  65. printf("Su Mo Tu We Th Fr Sa\n");
  66. int first = what_day(y,m,1), i;
  67. for(i=0;i<first;i++){
  68. printf(" ");
  69. }
  70. for(i=1;i<=maxday_of_month(y,m);i++){
  71. printf("%2d ",i);
  72. if((i + first) % 7 == 0){
  73. printf("\n");
  74. }
  75. }
  76.  
  77. }
  78.  
  79. int main(void) {
  80. int y=2025, m=4;
  81. calendar(y,m);
  82. return 0;
  83. }
Success #stdin #stdout 0.01s 5324KB
stdin
Standard input is empty
stdout
Su Mo Tu We Th Fr Sa
       1  2  3  4  5 
 6  7  8  9 10 11 12 
13 14 15 16 17 18 19 
20 21 22 23 24 25 26 
27 28 29 30