sicily--1814. 日期计算问题
2012-07-17 14:37
323 查看
不难
计算闰年:能被4整除且不能被100整除的是闰年; 能被400整除的是闰年
计算出起始日期是该年的哪一天day1
计算出终止日期是该年的哪一天day2
计算出两个年份之间的天数,包括起始的年份,不包括终止的年份
用上一步的天数减去起始日期的所在年的day1,加上终止日期所在年的day2即为所求答案
计算闰年:能被4整除且不能被100整除的是闰年; 能被400整除的是闰年
计算出起始日期是该年的哪一天day1
计算出终止日期是该年的哪一天day2
计算出两个年份之间的天数,包括起始的年份,不包括终止的年份
用上一步的天数减去起始日期的所在年的day1,加上终止日期所在年的day2即为所求答案
#include<iostream> #include<string> using namespace std; int DaysOfYear(int year) { if((year % 4 == 0 && year % 100 != 0) ||(year % 400 == 0)) { return 366;//闰年 } else { return 365; } } int DaysOfMonth(int year,int month) { switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 2: if((year % 4 == 0 && year % 100 != 0) ||(year % 400 == 0)) return 29; else return 28; case 4: case 6: case 9: case 11: return 30; default: return 0; } } class Date{ public: Date(string date) { year = month = day = 0; int firstDot = date.find('.',0);//找到年后的那个点 int secondDot = date.find('.', firstDot + 1);//找到月后的那个点 //处理day int counter = 0; for(int i = date.length() - 1; i > secondDot; i--) { char d = date[i]; int temp = d - 48; for(int j = 0; j < counter; j++) { temp = temp * 10; } day = day + temp; counter++; } counter = 0; //处理month for(int i = secondDot - 1; i > firstDot; i--) { char m = date[i]; int temp = m - 48; for(int j = 0; j < counter; j++) { temp = temp * 10; } month = month + temp; counter++; } counter = 0; //处理year for(int i = firstDot - 1; i >= 0; i--) { char y = date[i]; int temp = y - 48; for(int j = 0; j < counter; j++) { temp = temp * 10; } year = year + temp; counter++; } } int GetYear() { return year; } int GetMonth() { return month; } int GetDay() { return day; } //重载‘-’ //要求left 的时间晚于 right的 friend int operator - (Date left, Date right) { int daysBeforeRight = 0; //先计算出右边的日期是一年中的哪一天 for(int i = 1; i < right.GetMonth(); i++) { daysBeforeRight = daysBeforeRight + DaysOfMonth(right.GetYear(), i); } daysBeforeRight = daysBeforeRight + right.GetDay();//如果是2000.1.1,daysBeforeRight 就是1 int daysBeforeLeft = 0; //计算出左边的日期是一年中的哪一天 for(int i = 1; i < left.GetMonth(); i++) { daysBeforeLeft = daysBeforeLeft + DaysOfMonth(left.GetYear(), i); } daysBeforeLeft = daysBeforeLeft + left.GetDay(); int interval = 0;//两个日期的间隔 for(int i = right.GetYear(); i < left.GetYear(); i++) { interval = interval + DaysOfYear(i); } //实际的间隔 interval = interval - daysBeforeRight + daysBeforeLeft; return interval; } private: int year; int month; int day; }; int main() { int caseNum; cin >> caseNum; while(caseNum--) { string first, second; cin >> first >> second; Date one(first); Date two(second); //比较两个时间的先后 if(first.length() > second.length())//长度长的时间较晚 { int interval = one - two; cout << interval << endl; } else { if(first.length() < second.length()) { int interval = two - one; cout << interval << endl; } else//长度相等 { if(first > second)//字符串比较大小,大的时间较晚 { int interval = one - two; cout << interval << endl; } else { int interval = two - one; cout << interval << endl; } } } } return 0; }
相关文章推荐
- sicily 1814.日期计算问题
- Sicily 1814. 日期计算问题
- Sicily 1814. 日期计算问题
- Sicily 1814日期计算问题
- 关于C语言中日期 计算问题
- PHP 计算下个月当天日期,解决跨年和2月份的各种问题
- 2.为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员键入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。 请写出问题定义并分析此系统的可行性。
- 日期计算的问题
- 问题:计算给定年月日的日期是星期几(泽勒一致性)
- 第十七周 项目5 处理时间日期(计算这是第几天或第几秒的问题)
- NSDate的计算问题、日期计算、时区问题、NSTimer
- 为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。 写出问题定义并分析系统的可行性。
- asp中计算日期差的问题
- 关于计算日期时间问题
- calendar计算出的日期未格式化引发边界值问题。
- Java日期计算天数差需要注意的问题
- c实现任给两日期计算相隔天数问题
- NSDate的计算问题、日期计算、时区问题、NSTimer
- 对指定日期计算出N天后的日期问题
- 2-2 为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员键入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。请写出问题定义并分析此系统的可行性。