包含求解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();
}
京公网安备 11010502036488号