POJ NOI MATH-7831 计算星期几

问题链接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;
}



原文地址:https://www.cnblogs.com/tigerisland/p/7563971.html