zoukankan      html  css  js  c++  java
  • LightOJ 1282

    Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu

    Status

    Description

    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

    5

    123456 1

    123456 2

    2 31

    2 32

    29 8751919

    Sample Output

    Case 1: 123 456

    Case 2: 152 936

    Case 3: 214 648

    Case 4: 429 296

    Case 5: 665 669

    Source

    Problem Setter: Shamim Hafiz
    Special Thanks: Jane Alam Jan (Solution, Dataset)
    /**
              题意:求a的b次幂,结果的高三位和低三位是什么
              做法:快速幂 
    **/
    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<cmath>
    #include<algorithm>
    #define mod 1000
    using namespace std;
    int quickpow(int n, int k)
    {
        int res = 1;
        int base = n%mod;
        while(k)
        {
            if(k&1)
                res *= base;
            base *= base;
            res %= mod;
            base %= mod;
            k >>= 1;
        }
        return res;
    }
    int solve(int   a,int   b)
    {
              double s = b*log10((double)a) - (int)(b*log10((double)a));
        s = pow(10.0,s);
        return s*100;
    }
    int main()
    {
    #ifndef ONLINE_JUDGE
             freopen("in.txt","r",stdin);
    #endif // ONLINE_JUDGE
              int Case = 1;
              int T;
              scanf("%d",&T);
              while(T--)
              {
                        int  a,b;
                        scanf("%d %d",&a,&b);
                        int  res = quickpow(a,b);
                        int cet =pow(10, 2+fmod(b *(double)log10((double)a), 1));
                       printf("Case %d: %d %03d
    ",Case,cet,res);
                       Case++;
              }
              return 0;
    }
  • 相关阅读:
    C# WinForm开发系列
    C# Tcp协议收发数据(TCPClient发,Socket收)
    Tcpclient简单聊天程序
    大白话系列之C#委托与事件讲解大结局
    大白话系列之C#委托与事件讲解(三)
    poj3009
    poj 3083
    poj 2488
    POJ 3320
    poj 3061
  • 原文地址:https://www.cnblogs.com/chenyang920/p/4445561.html
Copyright © 2011-2022 走看看