原oj网址 点击打开链接
vj 网址 点击打开链接
这道题是 给你两个数 一个是n 一个是k 然后让你求 n^k 的前三位 和后三位 这个题 讲真 真的 没什么思路 但是后三位确实很好求 直接快速幂 mod=1000 就能求出来后三位 问题是 前三位怎么求 这个肯定不会是暴力 暴力肯定会超时,然后自己想了很长一会 想到了 用log 但是 总是样例过不了 试着 抱着侥幸心里 特判了样例 结果wa了 (大家别学我这种鸵鸟思想),然后我以为是我思路错了 结果。。。。。思路是对的 其实是 自己的细节没有处理好!!!
这道题其实可以分解 double x *10^len=n^k, 然后 len=log(n)*k; 这个 len是整数 这个很重要 然后就是 要求出x 了 n^k =x*10^len ; log(n)*k=log(x)+log(10^len) 那么 log(x)=log(n)*k-len x=10^(log(n)*k-len),然后这个地方要切记不要把 x的精度给整没了 然后一直 乘10 知道 x大于100
#include <stdio.h> #include <algorithm> #include <string.h> #include <string> #include <math.h> using namespace std; const int mod=1000; long long int n,k; int qust() { n=n%mod; int nn=1; while(k) { if(k&1) nn=(nn*n)%mod; n=(n*n)%mod; k/=2; } return nn%mod; } int main() { int t,lll,x,y,len; double qq; scanf("%d",&t); for(lll=1;lll<=t;lll++) { scanf("%lld%lld",&n,&k); len=log10(n)*k; qq=pow(10,1.0*log10(n)*k-len); while(qq<100) qq*=10; x=qq; y=qust(); printf("Case %d: %d d\n",lll,x,y); } return 0; }以下是自己的感概 与此题无关 可以略过~~
(ps:今天蓝桥杯除了成绩 我们一个大二学长 祥神在a组一等里面排名第一 而我个小菜虾 就在b组老后面 拿了一个一等奖 看着我们很多学长的实力 又看到个人赛不如意的我 总感觉自己很菜 压力很大 ,但是不会放弃的把 虽然现在很想去ctf 搞一波逆向 但是对现在的工作室已经产生了感情~~~~~)
