2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 实现某年某月某日是星期几

实现某年某月某日是星期几

时间:2021-10-21 23:22:26

相关推荐

实现某年某月某日是星期几

题目:用户输入年、月、日,输出该天是星期几,如果用户输入三个连续的0,则退出程序。

要求:对用户输入的数据进行校验,如小月(4、6、9、11月)天数不能大于30天,闰年二月天数不能大于29天,非闰年天数不能大于28天。

思路:统计从公元0001年1月1日到现在共有多少天,然后将天数取模7就是星期几了。

实现:统计该天是该年的第几天,然后统计0001年到该年共几天,相加就是总天数。

代码实现:

#include<iostream>using namespace std;int methodYear(int year) //是否是闰年{if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))return 1;elsereturn 0;}int method(int year, int month, int day){int temp = methodYear(year) + 28; //该年二月的天数switch(month){case 1: return day;case 2:if(methodYear(year) == 1 && day > 29 || methodYear(year) == 0 && day > 28)return 0;//闰年不能大于29天,非闰年不能大于28天return 31 + day;case 3:return 31 + temp + day;case 4: if( day > 30) return 0;return 31 + temp + 31 + day;case 5: return 31 + temp + 31 + 30 + day;case 6: if( day > 30) return 0;return 31 + temp + 31 + 30 + 31 + day;case 7: return 31 + temp + 31 + 30 + 31 + 30 + day;case 8: return 31 + temp + 31 + 30 + 31 + 30 + 31 + day;case 9: if( day > 30) return 0;return 31 + temp + 31 + 30 + 31 + 30 + 31 + 31 + day;case 10: return 31 + temp + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day;case 11: if( day > 30) return 0;return 31 + temp + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day;case 12: return 31 + temp + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day;}}int main(){int year, month, day;while(true){int res;cout << "please input year month day" << endl;cin >> year >> month >> day;if(year == 0 && month == 0 && day ==0) break;if(month > 12) //月数不能大于12cout << "year error!!!" << endl;else if(day > 31)cout << "day error!!!" << endl; //超过31天else{res = method(year,month,day);//计算当年的天数if(res > 0){for(int i = 1; i < year; i++)//计算公元0001年1月1日到现在共有几天{if(methodYear(i) == 1) //是闰年加366天res += 366;elseres += 365;}res = res % 7 == 0 ? 7 : res % 7;cout << "今天是星期" << res << endl; //总天数取模7就是星期几}elsecout << "day error!!!" << endl;}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。