您的位置:首页 > 大数据 > 人工智能

Light-oj 1282 - Leading and Trailing

2016-08-23 21:27 507 查看
1282 - Leading and Trailing





PDF (English)StatisticsForum
Time Limit: 2 second(s)Memory Limit: 32 MB
You are given two integers: n and k, your task is to find the most significant three digits, and least significant three digits of nk.

Input

Input starts with an integer T (≤ 1000), denoting the number of test cases.

Each case starts with a line containing two integers: n (2 ≤ n < 231) and k (1 ≤ k ≤ 107).

Output

For each case, print the case number and the three leading digits (most significant) and three trailing digits (least significant). You can assume that the input is given such that nk contains at least six digits.

Sample Input

Output for Sample Input

5

123456 1

123456 2

2 31

2 32

29 8751919

Case 1: 123 456

Case 2: 152 936

Case 3: 214 648

Case 4: 429 296

Case 5: 665 669

这个的数学思想就好玩了后几个都会求至于前几个其实我们只要找到(10)^(2+p) 直接来代表前三个数就好了后面的小数直接舍去就行了

至于怎么求神奇的p=log10(n)先求出来原来那个数是10的多少次方然后p*k就是现在

想让你求的多少次方了再后面就是直接舍去整数求10(p+2)就好了

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
#include <cmath>
using namespace std;
typedef long long LL;
LL Qpow(int n,int m){
LL r=1; LL base=n;
while(m){
if(m&1){
r=(r*base)%1000;
}
base=base*base%1000;
m>>=1;
}
return r;
}
int main(){
int T; scanf("%d",&T); int t=1;
while(T--){
LL n; LL k;
scanf("%lld %lld",&n,&k);
printf("Case %d: ",t++);
double lp=log10(n);
lp=lp*(double)k;
LL kp=(int)lp;
lp=lp-kp;
int m = pow( 10.0, lp+2.0);
printf("%03d ",m);
LL x=Qpow(n,k);
printf("%03d\n",x);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: