- 题目描写叙述:
-
给出年分m和一年中的第n天。算出第n天是几月几号。
- 输入:
-
输入包含两个整数y(1<=y<=3000)。n(1<=n<=366)。
- 输出:
-
可能有多组測试数据。对于每组数据,
按 yyyy-mm-dd的格式将输入中相应的日期打印出来。
- 例子输入:
-
2000 3 2000 31 2000 40 2000 60 2000 61 2001 60
- 例子输出:
-
2000-01-03 2000-01-31 2000-02-09 2000-02-29 2000-03-01 2001-03-01
C++代码:
#include <iostream> #include <stdio.h> using namespace std; int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int b[12]={31,29,31,30,31,30,31,31,30,31,30,31}; int main() { int y,d; while(cin>>y>>d){ int i; if((y%4==0&&y%100!=0) || y%400==0){ for(i = 0;i<12&&d>0;i++){ d-=b[i]; } d+=b[--i]; } else{ for(i = 0;i<12&&d>0;i++){ d-=a[i]; } d+=a[--i]; } printf("%04d-%02d-%02d ",y,i+1,d); } } /************************************************************** Problem: 1186 User: Carvin Language: C++ Result: Accepted Time:140 ms Memory:1520 kb ****************************************************************/
Java代码:
package oj1186; import java.util.Scanner; public class oj1186{ public static void main(String args[]){ int years, days; int month[]={31,28,31,30,31,30,31,31,30,31,30,31}; Scanner in =new Scanner(System.in); while(in.hasNext()){ String outMonths = null,outDays = null,outYears=null; years=in.nextInt(); days=in.nextInt(); if(years<1||years>3000||days<1||days>367) continue; int months=1; if(years%400==0||(years%4==0&&years%100!=0)) month[1]=29; for(int i=0;i<12;i++){ if(days-month[i]>0){ months++; days-=month[i]; } else break; }//for if(months<10) outMonths="0"+months; else outMonths=""+months; if(days<10) outDays="0"+days; else outDays=""+days; if(years<1000&&years>=100) System.out.println("0"+years+"-"+outMonths+"-"+outDays); else if(years>=1000) System.out.println(+years+"-"+outMonths+"-"+outDays); else if(years<100&&years>=10) System.out.println("00"+years+"-"+outMonths+"-"+outDays); else if(years<10) System.out.println("000"+years+"-"+outMonths+"-"+outDays); } } }