题解 | Day of Week
Day of Week
https://www.nowcoder.com/practice/a3417270d1c0421587a60b93cdacbca0
#include <stdio.h> #include <string> #include <iostream> using namespace std; string months[13] = {" ", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; string weeks[8] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; //一年的总天数 int Days(int year) { //int dayOfmonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; bool isLeap = year % 400 == 0 || year % 100 != 0 && year % 4 == 0; if (isLeap) { return 366; } else { return 365; } } //今年以前的所有年的总天数 int BYearDays(int year) { int i, days = 0; for (i = 1; i < year; ++i) { days += Days(i); } return days; } //今年的总天数 int ThisYearDays(int year, int month, int day) { int j, sum = 0; int dayOfmonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool isLeap = year % 400 == 0 || year % 100 != 0 && year % 4 == 0; if (isLeap) { dayOfmonth[2] = 29; } for (j = 1; j < month; ++j) { sum += dayOfmonth[j]; } sum += day; return sum; } int main() { int day, year, month, i, j; string smonth, week; int num1, num2; //num1:存放今年以前的所有年的总天数,num2存放今年到某天的天数;sum=num1+num2; //scanf("%d %s %d",&day,&smonth,&year)!=EOF //ps:scanf与c++字符串不兼容!!! while (cin >> day >> smonth >> year) { int sum = 0; //将英文的月份与数字对应起来 for (i = 0; i < 13; ++i) { if (months[i] == smonth) { month = i; break; } } num1 = BYearDays(year); num2 = ThisYearDays(year, month, day); sum = (num1 + num2) % 7; //数字,代表星期几 ,ps:若为0,是星期日 week = weeks[sum]; cout << week << endl; // 注意输出!!printf不能输出字符串数组。怪不得编译错误 //cout 在#include <iostream>里 } //cout<<"hi"<<endl; return 0; }
王道机试指南 文章被收录于专栏
这个专栏是参考王道机试指南中相关的练习题哦