LightOJ1282 Leading and Trailing 大数取首尾

来源:互联网 发布:拉菲时时彩源码 编辑:程序博客网 时间:2024/06/06 00:04
  1. 任何一个数都可以转换为10^k,k是一个小数,k的整数部分决定了这个数的位数,小数部分决定了每一位的值,根据此可以快速找到前三位。
  2. 通过快速幂取模可以快速找到后三位。

题目链接:http://acm.hust.edu.cn/vjudge/problem/26992

#pragma comment(linker,"/STACK:1024000000,1024000000")#include<cstdio>#include<iostream>#include<sstream>#include<cstdlib>#include<cmath>#include<cctype>#include<string>#include<cstring>#include<algorithm>#include<stack>#include<queue>#include<set>#include<map>#include<ctime>#include<vector>#include<fstream>#include<list>using namespace std;#define ms(s) memset(s,0,sizeof(s))typedef unsigned long long ULL;typedef long long LL;const int INF = 0x3fffffff;long long q_mod(long long a, long long b, int m){    long long ans = 1;    for( ; b; b >>= 1){        if(b&1)            ans = ans*a % m;        a = a*a % m;    }    return ans;}int main(){//    freopen("F:\\input.txt","r",stdin);//    freopen("F:\\output.txt","w",stdout);//    ios::sync_with_stdio(false);    int t;    int n,k;    double ans;    int ans1,ans2;    scanf("%d",&t);    for(int cas = 1; cas <= t; ++cas){        scanf("%d%d",&n,&k);        ans = (double)k*log10(n);        ans = ans - (int)ans;        ans = pow(10,ans);        ans1 = (int)(ans*100.0);        ans2 = (int)q_mod(n,k,1000);        printf("Case %d: %03d %03d\n",cas,ans1,ans2);    }    return 0;}
0 0
原创粉丝点击