看似很简单的问题可是很多人会忽略一点就是如果一个数足够大的话他们的乘积就会超出int的范围即使用了long long 也是会超出范围的,我们思考一下不难发现x的x次方最低位的结果只和每次需要相乘的两个数的最低位有关和其他位没有任何关系,那接下来就好办了,我们只需要每次把x取余10就OK了这样也不会超出范围;下面是详细代码,写的不好勿喷。
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
typedef long long ll;
ll pow_mod(ll x,ll n);
ll x,mod=10;
int T;
ll pow_mod(ll x,ll n)
{
ll res=1;
x=x%mod;
while(n)
{