computer n^k leading three digits.
n^k=a.
lg(a)=k*lg(a).
k*lg(a)=integer+decimal
10^lg(a)=a=10^(k*lg(a))=10^(integer+decimal)=10^integer*10^decimal
n^k=a.
lg(a)=k*lg(a).
k*lg(a)=integer+decimal
10^lg(a)=a=10^(k*lg(a))=10^(integer+decimal)=10^integer*10^decimal
10^integer*10 算出的整十的倍数
10^decimal才是计算真正结果的数字
1<10^decimal<10 所以10^(decimal+2) 就会求出前三位数注意后三位数 注意缺0情况
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
using namespace std;
typedef long long ll;
int pow_mod(int a,int n,int m)
{
int ans=1;
while(n)
{
if(n&1) ans=ans*a%m;
a=a*a%m;
n>>=1;
}
return ans;
}
int fun(int n,int k)
{
double d=fmod(k*log10(n),1);///算出x/y的余数
double ans=pow(10,d+2);
//double ans=pow(10,k*log10(n)-(int)(k*log10(n))+2);
return (int)ans;
}
int main()
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
int n;
int k;
scanf("%d %d",&n,&k);
printf("Case %d: %d %03d\n",i,fun(n,k),pow_mod(n%1000,k,1000));
}
return 0;
}