zoukankan      html  css  js  c++  java
  • 输入一个正整数,输出2000年1月1日经过该整数天后的日期.

    //输入一个正整数,输出2000年1月1日经过该整数天后的日期.已测试,输入值可以为0~1095727
    //如,100天后,日期为2000 4 10
    
    #include<stdio.h>
    
    #define MAX_YEAR 5000//年数可以从2000一直到4999年。
    
    //函数功能:求解第year年共有多少天
    int day_in_year(int year)
    {
    	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
    		return 366;
    	else
    		return 365;
    }
    
    int main()
    {
    	int input;
    	int year, month, day;
    
    	long Accumulate_days_for_year[MAX_YEAR] = {0};
    	int Accumulate_days_for_month_in_leap_year[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
    	int Accumulate_days_for_month_in_aver_year[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    	int i;
    
    	scanf_s("%d", &input);
    
    	for (i = 2000; i < MAX_YEAR; i++)
    	{
    		Accumulate_days_for_year[i] = day_in_year(i);
    	}
    	for (i = 2001; i < MAX_YEAR; i++)
    	{
    		//该数组[2000]为366;[2001]为366+365,即2000年和2001年天数的累和;[2002]为366+365+365,即2000-2002年天数的累和。依次类推。
    		//通过将累和与输入input比较,即可得知结果为哪一年。
    		Accumulate_days_for_year[i] = Accumulate_days_for_year[i - 1] + Accumulate_days_for_year[i];
    	}
    	for (i = 2; i < 13; i++)
    	{
    		//该数组[1]为31;[2]为31+29,即1月和2月天数的累和;[3]为31+29+31,即1-3月天数的累和。依次类推。
    		//通过累和判断结果为哪一月。
    		Accumulate_days_for_month_in_leap_year[i] = Accumulate_days_for_month_in_leap_year[i] + Accumulate_days_for_month_in_leap_year[i - 1];
    		//该数组[1]为31;[2]为31+28,即1月和2月天数的累和;[3]为31+28+31,即1-3月天数的累和。依次类推。
    		//通过累和判断结果为哪一月。
    		Accumulate_days_for_month_in_aver_year[i] = Accumulate_days_for_month_in_aver_year[i] + Accumulate_days_for_month_in_aver_year[i - 1];
    	}
    
    	//判断年数
    	for (i = 2000; i < MAX_YEAR; i++)
    	{
    		if (input < Accumulate_days_for_year[i])
    		{
    			year = i;
    			break;
    		}
    	}
    
    	//得知年数后,通过下式判断结果为当年的第几天。
    	input = input - Accumulate_days_for_year[year-1];
    
    	//如果year为闰年,使用月累和数组Accumulate_days_for_month_in_leap_year
    	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
    	{
    		for (i = 1; i < 13; i++)
    		{
    			if (input < Accumulate_days_for_month_in_leap_year[i])
    			{
    				month = i;
    				day = input - Accumulate_days_for_month_in_leap_year[i - 1] + 1;
    				break;
    			}
    		}
    	}
    	//如果year为平年,使用月累和数组Accumulate_days_for_month_in_aver_year
    	else 
    	{
    		for (i = 1; i < 13; i++)
    		{
    			if (input < Accumulate_days_for_month_in_aver_year[i])
    			{
    				month = i;
    				day = input - Accumulate_days_for_month_in_aver_year[i - 1] + 1;
    				break;
    			}
    		}
    	}
    
    	printf("%d
    ", year);
    	printf("%d
    ", month);
    	printf("%d
    ", day);
    	return 0;
    }
  • 相关阅读:
    时间戳与时间之间的相互转化
    源代码管理之Git命令的使用
    ios最新设置状态栏字体颜色总结
    iOS 代码方式设置按钮标题、图片的偏移
    runloop简单介绍
    iOS中的多线程NSThread/GCD/NSOperation & NSOperationQueue
    AFNetworking的详细解析
    MATLAB相关快捷键以及常用函数
    CentOS 5.8下快速搭建FTP服务器
    php获取跳转后的真实链接
  • 原文地址:https://www.cnblogs.com/Camilo/p/3841550.html
Copyright © 2011-2022 走看看