杭电oj Realtime Status(利用快速幂)

发布时间 2023-04-02 13:54:07作者: 啥都不会的灰太狼
今天这个题我又又又是看大佬的题解。原因是我的暴力想法超时了…………

大家可以先搜索一下什么是快速幂。(我看完之后了解的快速幂,就是通过放大底数以达到减小指数从而大幅减少运算次数的方法)

这里就不赘述了,题目是这样的:

对了,再啰嗦几句,由于这个题的数据量很大并且他只需要输出个位,所以我们在每次进行完一次操作后都应该对10取模。这样以保证不会越过int的范围。

#include<iostream>
#include<cstring>
using namespace std;
int cul(int base,int power){
    int result = 1;
    base %= 10;                   //防止超过数据的范围
    while(power > 0){
        if(power & 1 == 1){
           result = result * base % 10;
        }
        power >>= 1;
        base = base * base % 10;
    }
    return result;
}
int main()
{
    int n;
    int m;
    cin>>n;
    for(int i = 0;i < n;i++){
        cin>>m;
    cout<<cul(m,m)<<endl;
    }
    return 0;
}

好了 这样这道题就结束了。

本题好收获了一个东西。判断一个数是奇数还是偶数是,让这个数和1按位与。这样更快。

好了 小灰灰继续加油!!!!!!!!!!!!!!!!