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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)