基础数学1005 LightOJ 1282

来源:互联网 发布:中联软件 编辑:程序博客网 时间:2024/05/23 05:08

题意:
求n^k的前三位和后三位
思路:
后三位快速幂,注意补0
前三位的话…
讲n^k=10^t=10^(t1+t2)
t1是t的整数部分,很明显,len(10^t1)=len(n^k)
t2是t的小数部分,就是我们需要的数
将t2*100就行了

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<string>#include<vector>#include<map>#include<set>using namespace std;#define lowbit(x) (x&(-x))typedef long long LL;const int maxn = 100005;const int inf=(1<<28)-1;LL quick_mod(LL a,LL b,LL mod){    LL res=1,tmp=a;    while(b)    {        if(b&1) res=(res*tmp)%mod;        b/=2;        tmp=(tmp*tmp)%mod;    }    return res;}int main(){    int T,Case=0;    scanf("%d",&T);    while(T--)    {        LL n,k;        scanf("%lld%lld",&n,&k);        double t=k*log10(n)-(LL)(k*log10(n));        t=pow(10,t);        t*=100;        LL Ans1=(LL)t;        printf("Case %d: %lld %03lld\n",++Case,Ans1,quick_mod(n,k,1000));    }    return 0;}
0 0
原创粉丝点击