[OpenJudge-NOI]2011 快速冪

題目大意

求2011的n次方,n爲高精度數

枚舉可以發現n=500時爲1;所以取末三位對500取模

代碼

#include <cstdio>
#include <iostream>
#include <cstring>
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<<Quick_Pow(2011,a)%10000<<endl;
    }   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章