標準入力された年と月から、その月の日数を求めて出力する処理を、C#、Java、JavaScript、PHP、Python、Rubyの6言語で書いてみました。
2月については、その年がうるう年かどうか判定し、うるう年であれば29日、うるう年以外の平年であれば28日を出力します。
2月以外の小の月(4月、6月、9月、11月)の場合は30日、大の月(1月、3月、5月、7月、8月、10月、12月)は31日を出力します。
なお、月の入力が不正な場合(13以上など)は、C#とJavaは0、JavaScript、PHP、Python3、Rubyについては0を出力します。
うるう年を判定する処理、年と月からその月の日数を判定する処理は、それぞれメソッドとして定義しています。
C#
using System;
using System.Linq;
public class Sample{
//うるう年判定
public static bool leap(int year){
if ((year % 400 == 0 || year % 100 != 0 && year % 4 == 0) && year > 4){
return true;
} else {
return false;
}
}
//月の日数を返す
public static int monthDay(int year, int month){
if (month == 2 && leap(year) == true){
return 29;
} else if (month == 2 && leap(year) == false){
return 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11){
return 30;
} else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
return 31;
} else {
return 0;
}
}
public static void Main(){
var line = Console.ReadLine().Trim().Split(' ').Select(x => int.Parse(x)).ToArray();
Console.WriteLine(monthDay(line[0], line[1]));
}
}
Java
import java.util.*;
public class Main {
//うるう年判定
public static boolean leap(int year) {
if ((year % 400 == 0 || year % 4 == 0 && year % 100 != 0) && year > 4){
return true;
} else {
return false;
}
}
//月の日数を返す
public static int monthDay(int year, int month){
if (month == 2 && leap(year) == true){
return 29;
} else if (month == 2 && leap(year) == false){
return 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11){
return 30;
} else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
return 31;
} else {
return 0;
}
}
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
var line = scan.nextLine().trim().split(" ");
int y = Integer.parseInt(line[0]);
int m = Integer.parseInt(line[1]);
System.out.println(monthDay(y,m));
}
}
JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
//うるう年判定
function leap (year){
if ((year % 400 === 0 || year % 100 !== 0 && year % 4 === 0) && year > 4){
return true;
} else {
return false;
}
}
//月の日数を返す
function monthDay (year, month){
if (month == 2 && leap(year) === true){
return 29;
} else if (month == 2 && leap(year) === false){
return 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11 ){
return 30;
} else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
return 31;
} else {
return "エラー";
}
}
var ln = lines[0].trim().split(' ').map(x => parseInt(x));
console.log(monthDay(ln[0], ln[1]));
});
PHP
<?php
//うるう年判定
function leap($year){
if ( ($year % 400 == 0 || $year % 100 != 0 && $year % 4 == 0) & $year > 4){
return true;
} else {
return false;
}
}
//月の日数を返す
function monthDay($year, $month){
if ($month == 2 && leap($year) == true){
return 29;
} elseif ($month == 2 && leap($year) == false){
return 28;
} elseif ($month == 4 || $month == 6 || $month == 9 || $month == 11){
return 30;
} elseif ($month == 1 || $month == 3 || $month == 5 || $month == 7 || $month == 8 || $month == 10 || $month == 12){
return 31;
} else {
return "エラー";
}
}
$line = trim(fgets(STDIN));
$ln = explode(' ' , $line);
echo monthDay($ln[0], $ln[1])."\n";
?>
Python3
#うるう年判定
def leap (year):
if (year % 400 == 0 or year % 100 != 0 and year % 4 == 0) and year > 4:
return True
else:
return False
#月の日数を返す
def monthDay(year, month):
if month == 2 and leap(year) == True:
return 29
elif month == 2 and leap(year) == False:
return 28
elif month == 4 or month == 6 or month == 9 or month == 11:
return 30
elif month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
return 31
else:
return "エラー"
line = list(map(int, input().rstrip().split(' ')))
print(monthDay(line[0], line[1]))
Ruby
Ruby
#うるう年判定
def leap (year)
if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0) && year > 4
return true
else
return false
end
end
#月の日数を返す
def monthDay(year, month)
if month == 2 && leap(year) == true
return 29
elsif month == 2 && leap(year) == false
return 28
elsif month == 4 || month == 6 || month == 9 || month == 11
return 30
elsif month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12
return 31
else
return "エラー"
end
end
line = gets.chomp.split(' ').map(&:to_i)
puts monthDay(line[0], line[1])
与えられた年と月からその月の日数を求められることにより、「Y年M月D日のX日後の日付は?」みたいな処理が可能になります。