题解 | 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;
}
王道机试指南 文章被收录于专栏
这个专栏是参考王道机试指南中相关的练习题哦
阿里云成长空间 781人发布