Leading and Trailing

来源:互联网 发布:linux开发环境 编辑:程序博客网 时间:2024/06/05 19:30
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

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;}


0 0
原创粉丝点击