CCF习题 日历问题(JAVA)

给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。(2000年1月1日周六)
 样例输入:
1730
1740
1750
1751
-1

样例输出:
2004-09-26 Sunday
2004-10-06 Wednesday
2004-10-16 Saturday
2004-10-17 Sunday
 

import java.util.Scanner;

public class Main {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int []dm1={31,28,31,30,31,30,31,31,30,31,30,31};
		int []dm2={31,29,31,30,31,30,31,31,30,31,30,31};
		String []week={ "Saturday","Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
		int in[]=new int[10];
		int i=0;
		Scanner sc = new Scanner(System.in);
		for(;i<10;i++)
		{
			if((in[i]=sc.nextInt())==-1)
			{
				break;
			}
		}
		
		for(int t=0;t<=i;t++)
		{
	        if(in[t]<0)
	        {
	        	break;
	        }
	        	
	        int day=in[t]%365+1;//某年的某天
	        int year=in[t]/365;//逝去年数
	        int run=(year-1)/4+1;//闰年数目
	        int nosp=(year/100)-(year/100)/4;//假闰年数
	        run=run-nosp;
	        int mouth=1;//月
	       
	        Main m=new Main();
	        if(year>=1)//逝去天数超过1年
	        {
	        	if((day=day-run)<=0)//除去闰年多出天数
	        	{
	        		while(day<=0)//闰年数超过一年天数
	        		{
	        			day=m.isspyear(--year)+day;
	        		}
	        	}
	        	
	        }
	        
	        if(m.isspyear(year)==366)//计算月与日(闰年情况)
	        {
	        	while(true)
	        	{
	        		if((day=day-dm2[mouth-1])>0)
	        		{
	        			mouth++;
	        		}
	        		else
	        		{
	        			day=day+dm2[mouth-1];
	        			break;
	        		}
	        	}
	        }
	        else if(m.isspyear(year)==365)//计算月与日(非闰年情况)
	        {
	        	while(true)
	        	{
	        		if((day=day-dm1[mouth-1])>0)
	        		{
	        			mouth++;
	        		}
	        		else
	        		{
	        			day=day+dm1[mouth-1];
	        			break;
	        		}
	        	}
	        }
	        String Tmouth = String.format("%02d", mouth);//数字格式化
	        String Tday = String.format("%02d", day); 
	        System.out.println(year+2000+"-"+Tmouth+"-"+Tday+" "+week[in[t]%7]);
	     }  
	}
	
	public int isspyear(int year)//闰年判定
	{
		int issp=365;
		if(year%4==0)
    	{
    		issp=366;
    		if(year%100==0&&year%400!=0)
    		{
    			issp=365;
    			
    		}
    	}
		return issp;
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值