2.给出距离1900年1月1日的天数,求日期

 1 #include <iostream>
 2 #include <assert.h>
 3
 4
 5 //判断是否闰年
 6 bool IsLeapYear(unsigned int year)
 7 {
 8   if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
 9   {
10     return true;
11   }
12   else
13   {
14     return false;
15   }
16 }
17
18 //根据一年中的第几天(0起始),返回月份(1起始),并且置天数为其在本月的索引(0起始)
19 unsigned int GetMonthByDay(unsigned int &day, bool leap)
20 {
21   assert(day < (leap ? 366 : 365));
22   static unsigned int monthtable[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
23   monthtable[1] = leap ? 29 : 28;
24
25   unsigned int  month = 0;
26   unsigned int count = 0;
27   unsigned int n = day;
28
29   do
30   {
31     n = day - count;
32     count += monthtable[month++];
33   } while (day >= count);
34   day = n;
35   return month;
36 }
37
38 //距离1900年1月1日的天数(0起始),返回年,并且置天数为其在本年的索引(0起始)
39 unsigned int GetYearByDay(unsigned int &day)
40 {
41   unsigned int Y = day / 365;
42   int D = day % 365;
43   int  YY = Y - 1;
44   D -= YY / 4;
45   D += YY / 100;
46   D -= (YY + 300) / 400;
47   while (D < 0)
48   {
49     Y--;
50     D += IsLeapYear(Y + 1900) ? 366 : 365;
51   }
52   day = D;
53   return Y + 1900;
54 }
55
56 //距离1900年1月1日的天数(0起始),计算这一天的日期(年,月,日)(1起始)。
57 void foo(unsigned int &day, unsigned int &year, unsigned int &month)
58 {
59   year = GetYearByDay(day);
60   month = GetMonthByDay(day, IsLeapYear(year));
61   day += 1;
62 }
63
64 int main()
65 {
66   unsigned int day = 42696;
67   unsigned int year = 0;
68   unsigned int month = 0;
69   foo(day, year, month);
70   std::cout << year << "/" << month << "/" << day << std::endl;
71   getchar();
72   return 0;
73 }
时间: 2024-12-14 18:06:41

2.给出距离1900年1月1日的天数,求日期的相关文章

判断距离1970年1月1日的天数

#include <stdlib.h> /****************************************************************** 功能: 输入年月日,计算距离1970年1月1日的天数 输入: 年月日,输入年份范围[1970,2100],输入年月日的有效性需要判断 输出: DaysSince1970:距离1970年1月1日的天数 已知 1970年1月1日为星期四 异常时,输出不需要关注 返回: 1 上班 0 休假 -1 表示异常 根据国家规定:周一到

随机输入日期计算星期几(1900年1月1日为基础)

已知,1900年1月1日是星期1,用户随机输入年月日,计算星期几 代码如下(未改进),欢迎批评指正 year=int(input('year')) month=int(input('month')) day=int(input('day')) if year >=1900:#大于等于1900 ryear =1900 sum =0 while ryear < year:#1901 if ((ryear % 4 == 0) and (ryear %100 !=0))or(ryear % 400 =

2015年4月30日 计算两个日期天数,目前为止写的最长的代码

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 #define ISYEAR(year) (year%400==0) ||(year%4==0&&year%100!=0) 5 int DayofYear(int year, int month, int day); 6 7 8 int main(int argc, char *argv[]) 9 { 10 int year1

Linux学习笔记第三周第一次课(2月5日)

2.27linux和windows互传文件 用xshell软件 #yum install -y lrzsz linux传到windows,命令为#sz a.txt 按提示保存到windows windows传到linux,命令为#rz 选择windows文件,之后保存到当前目录 3.1 用户配置文件和密码配置文件5 /etc/passwd用户账号密码文件,配置文件: 配置文件内容,以冒号分隔,共7列: 第一列,用户名: 第二列,密码全用X表示: 第三列,UID: 第四列,GID: 第五列,注释:

Linux学习笔记第八周五次课(3月30日)

复习(今日无答疑,笔记可以不写) 三.用户和组管理 3.1 用户配置文件和密码配置文件5 /etc/passwd用户账号密码文件,配置文件:第一列,用户名:第二列,密码全用X表示:第三列,UID:第四列,GID:第五列,注释:第六列,用户家目录:第七列,用户shell目录: /etc/shadow专门存用户密码:第一列,用户名:第二列,加密的密码:第三列,密码从1970年1月1日开始最后修改的天数:第四列,密码要多少天才能修改:第五列,密码要多少天必须修改:第六列,密码到期前的警告天数:第七列,

hihoCoder 1148 2月29日

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "February",

2015年4月29日 dayofweek

#include <stdio.h>#include <stdlib.h>int DayofYear(int year, int month, int day);#define ISYEAR(year) (year%400==0) ||(year%4==0&&year%100!=0) int main(int argc, char *argv[]){/*已知1900年1月1日是星期一,输入一个年月日计算出来是星期几*/int year, month, day;cha

输入年、月、日计算是星期几

 /************************************************************************* 该程序功能: 1.输入年.月.日判断这天是星期几 2.打印出其中的闰年 3.计算从1600到输入时间,总共的天数 说明: 输入的年份必须大于1600 **************************************************************************/ #include <stdio.h> /

统计闰年2月29日天数

1.问题描述 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数.之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "February", "March", "Apr