包含求解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)); } //////////////////////////////////////
相关题目链接
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(); }