-
问题链接:
POJ NOI MATH-7831 计算星期几
。
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
假设今天是星期日,那么过ab天之后是星期几?
输入
- 两个正整数a,b,中间用单个空格隔开。0 < a <= 100, 0 < b <= 10000。 输出
-
一个字符串,代表过ab天之后是星期几。
其中,Monday是星期一,Tuesday是星期二,Wednesday是星期三,Thursday是星期四,Friday是星期五,Saturday是星期六,Sunday是星期日。
样例输入
-
3 2000
样例输出
-
Tuesday
来源
- 《奥数典型题举一反三(小学六年级)》 (ISBN 978-7-5445-2883-2) 模拟试题二 第16题
问题分析
计算ab天是困难的,因为数会很大。好在每周是7天,所以可以使用快速模幂运算来解决。
程序说明
(略)。
AC的C++语言程序:
#include <iostream>
#include <string>
using namespace std;
const int DAYS = 7;
string days[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
// 快速模幂函数
int powermod(int a, int n, int m)
{
int res = 1L;
while(n) {
if(n & 1L) {
res *= a;
res %= m;
}
a *= a;
a %= m;
n >>= 1;
}
return res;
}
int main()
{
int a, b, start = 0;
cin >> a >> b;
cout << days[(start + powermod(a, b, DAYS)) % DAYS] << endl;
return 0;
}