zoukankan      html  css  js  c++  java
  • hdu 1060 Leftmost Digit

      一句话题意:让你求n^n的最左位的数字是多少。

      题解:n最大可以为1000000000,那n^n就是超大的数了,,对于求关于n次方、斐波那契额和阶乘的位数这类的问题,首先就会想到取对数什么的(套路...);那么,看这题,对于m=n^n,有log10(m)=n*log10(n); 假设log10(m)=X.abcd,n^n=H.efgh*10^y;那么,又因为10^X.abcd=m=H.efgh*10^y; 则必有:X=H;故:10^0.abcd=H.efgh;求出10^0.abcd后,那它的整数位就是n^n的最左位了。  (另外,在对double取整时用(int)强转时会一直莫名的wa...估计应该是double为64位、int为32位互相转换损失的精度在某些数据上会给坑。。。)

    ac代码:

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <cmath>
     6 #include <set>
     7 #include <utility>
     8 #include <vector>
     9 #include <map>
    10 #include <queue>
    11 #include <stack>
    12 const int inf=0x3f3f3f3f;
    13 const double PI=acos(-1.0);
    14 const double EPS=1e-8;
    15 using namespace std;
    16 typedef long long ll;
    17 typedef pair<int,int> P;
    18 
    19 void debug()
    20 {
    21 }
    22 int n;
    23 int main()
    24 {
    25     //freopen("input.txt","r",stdin);
    26     //debug();
    27     int T;
    28     scanf("%d",&T);
    29     while(T--)
    30     {
    31         scanf("%d",&n);
    32         double temp=(double)n*log10((double)n);
    33         //temp-=(int)temp;
    34         temp-=(ll)temp;   //
    35         double tt=pow(10.0,temp);
    36         int ans=(int)tt;
    37         cout<<ans<<endl;
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    AT+CNMI的使用
    oracle 触发器及游标的使用
    索引优缺点
    SQL Server里的主键、唯一性约束、聚集索引
    C++中使用内存映射文件处理大文件
    oracle 学习笔记
    香干炒肉丝
    如何将数据导入到 SQL Server Compact Edition 数据库中
    解决ORACLE密码遗忘
    Office 2003 主 Interop 程序集的安装和使用
  • 原文地址:https://www.cnblogs.com/geek1116/p/6608071.html
Copyright © 2011-2022 走看看