zoukankan      html  css  js  c++  java
  • LightOJ 1282 Leading and Trailing(求n^k的前三位)

    题意:给你一个数n,让你求这个数的k次方的前三位和最后三位

    大体思路:后三位直接用快速幂即可

    求前三位则需要一些数学知识对于给定的一个数n,它可以写成10^a,其中这个a为浮点数,则n^k=(10^a)^k=10^a*k=(10^x)*(10^y);其中x,y分别是a*k的整数部分和小数部分,对于t=n^k这个数,它的位数由(10^x)决定,它的位数上的值则有(10^y)决定,因此我们要求t的前三位,只需要将10^y求出,在乘以100,就得到了它的前三位。
    fmod(x,1)可以求出x的小数部分。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 
     5 using namespace std;
     6 
     7 int length(long long n)
     8 {
     9     return (int)log10(n)+1;
    10 }
    11 
    12 
    13 long long quick1(long long a,long long b)
    14 {
    15     int s=1;
    16     while(b>0)
    17     {
    18         if(b%2==1)
    19         {
    20             s=s%1000;
    21             a=a%1000;
    22             s=s*a;
    23         }
    24         a=a*a%1000;
    25         b=b>>1;
    26 
    27     }
    28     return s;
    29 }
    30 
    31 int main()
    32 {
    33     ios::sync_with_stdio(false);
    34     int T;
    35     long long a,b;
    36     cin>>T;
    37     for(int i=1;i<=T;i++)
    38     {
    39         cin>>a>>b;
    40         int s=quick1(a,b);
    41         if(length(s)>3)
    42         {
    43          s=quick1(a,b)%1000;
    44         }
    45         double x=pow(10.0,fmod(b*log10(1.0*a),1));
    46         //fmod()函数求出小数部分,log10(1.0*a)则为10^a的小数部分
    47         //fmod(x,y)函数即计算x/y的余数
    48         x=x*100.0;
    49         printf("Case %d: %d %03d
    ",i,(int)x,s);
    50     }
    51 
    52     return 0;
    53 }
  • 相关阅读:
    jsp简单自定义标签demo展示《二》
    jsp自定义标签介绍《一》
    登陆filter
    中文乱码原因以及解决方案
    C++ 中注意,零扩展和符号位扩展
    linux下的a.out文件
    今天谈谈流,什么是IO流?
    windows下的c语言和linux 下的c语言以及C标准库和系统API
    一维数组的数组指针
    结构体指针传参与返回值
  • 原文地址:https://www.cnblogs.com/Fy1999/p/8891690.html
Copyright © 2011-2022 走看看