包含求解x^p的高n位,低n位,总位数的方法。
#大佬讲解
大佬讲解

模板代码

#include<bits/stdc++.h>
#define ll long long
using namespace std; 
int Low3(int,int);//x的p次方后三位 
int High3(int,int);//x的p次方前三位 
int Num(int,int);//x的p次方总位数 
int main(){
    int x=1234567,p=1234567;
    cout<<"x^p的低n位为:"<<Low3(x,p)<<endl;
    cout<<"x^p的高n位为:"<<High3(x,p)<<endl;
    cout<<"x^p的总位数为:"<<Num(x,p)<<endl;
}

//////////////////////////////////////

int Low3(int x,int p){//本质思想:快速幂 
    int ans=1;
    x%=1000;//没有这句超int范围 !!!划重点!!! 
    while(p){
        if(p&1) ans=ans*x%1000;
        x=x*x%1000;
        p>>=1;
    }
    return ans;
}

//////////////////////////////////////

int High3(int x,int p){
    double xp=p*log10(x);
    double m=xp-(ll)xp;
    return pow(10,m)*100;
}

//////////////////////////////////////

int Num(int x,int p){
    return ceil(p*log10(x));
}

//////////////////////////////////////

相关题目链接

HDU1060
HDU1061

AC代码

俩放一起了

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t,n;
int High1(int x,int p){
    double xp=p*log10(x);
    double m=xp-(ll)xp;
    return (int)pow(10,m);
}
int Low1(int x,int p){
    int ans=1;
    x%=10;//千万不可以忘记!!! 
    while(p){
        if(p&1) ans=ans*x%10;
        x=x*x%10;
        p>>=1;
    }
    return ans;
}
void solve_1060(){
    cin>>t;
    while(t--){
        cin>>n;
        cout<<High1(n,n)<<endl;
    }
}
void solve_1061(){
    cin>>t;
    while(t--){
        cin>>n;
        cout<<Low1(n,n)<<endl;
    }
}
int main(){
    //solve_1060();
    solve_1061();
}