给出年分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
#include
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\n",y,i+1,d);
}
}
/**************************************************************
Problem: 1186
User: Carvin
Language: C++
Result: Accepted
Time:140 ms
Memory:1520 kb
****************************************************************/
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);
}
}
}