码迷,mamicode.com
首页 > 其他好文 > 详细

LightOJ 1282 Leading and Trailing 数论

时间:2016-09-21 20:05:34      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

题目大意:求n^k的前三位数 和 后三位数。

题目思路:后三位数直接用快速幂取模就行了,前三位则有些小技巧:

对任意正数都有n=10^T(T可为小数),设T=x+y,则n=10^(x+y)=10^x*10^y,其中10^x为10的整倍数(x为整数确定数位长度),所以主要求出10^y的值。

T=log10(n^k)=klog10(n),可以调用fmod函数求其小数部分即y值。

 

技术分享
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<queue>
#include<math.h>
#define INF 0x3f3f3f3f
#define MAX 1000005
#define Temp 1000000000

using namespace std;

long long Pow(long long n,long long m)//快速幂取模
{
    long long ans=1;
    while(m)
    {
        if(m&1)
        {
            ans=ans*n%1000;
        }
        n=(n*(n%1000))%1000;
        m/=2;
    }
    return ans;
}

int main()
{
    long long cnt=1,T;
    long long n,m;
    scanf("%lld",&T);
    while(T--)
    {
        scanf("%lld%lld",&n,&m);
        long long S=Pow(n,m);
        long long E=(pow(10.0,2.0+fmod((double)m*(log10(double(n))),1))+1e-8);//注意精度问题
        printf("Case %lld: %lld %03lld\n",cnt++,E,S);
    }
    return 0;
}
View Code

 

LightOJ 1282 Leading and Trailing 数论

标签:

原文地址:http://www.cnblogs.com/alan-W/p/5893899.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!