[OpenJudge-NOI]2011 快速幂

题目大意

求2011的n次方,n为高精度数

枚举可以发现n=500时为1;所以取末三位对500取模

代码

#include 
#include 
#include 
using namespace std;
typedef long long ll;

ll Quick_Pow(ll a,ll b){
    ll re=1;
    while(b){
        if(b&1){
            re*=a;
            re%=10000;
        }
        a*=a;
        a%=10000;
        b>>=1;
    }
    return re;
}

int k,len;
char n[1000];
ll t,a;

int main(){
    cin>>k;
    while(k--){
        cin>>n;
        len=strlen(n);
        t=1,a=0;
        if(len<=4){
            for(int i=len-1;i>=0;i--){
                a+=(n[i]-'0')*t;
                t*=10;
                a%=500;
            }           
        }else{
            for(int i=len-1;i>=len-3;i--){
                a+=(n[i]-'0')*t;
                t*=10;
                a%=500;
            }               
        }
        cout<2011,a)%10000<

你可能感兴趣的:(快速幂,OpenJudge)