求一个大数最左边上的数
发布时间:2020-12-14 02:38:58 所属栏目:大数据 来源:网络整理
导读:1.18题目:给出一个正整数N,请输出N^N最左边的数。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (1= N=1000000000); 题目分析: ? ? ? ?暴力解决是不可行的,无论从时间上还是从占用内存上来看都是A不了的,所以要用点技巧,令N^N=d.xxxx*10
1.18题目:给出一个正整数N,请输出N^N最左边的数。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (1= <N<=1000000000);
题目分析: ? ? ? ?暴力解决是不可行的,无论从时间上还是从占用内存上来看都是A不了的,所以要用点技巧,令N^N=d.xxxx*10^(k-1),其中k代表数的位数,那么d.xxxx=10^(lgN^N-(k-1)),再对d.xxxx取整就是最终结果。因为k等于lgN^N的整数部分加1,所以k=lg(N^N+1)取整,至此,就获得了d的计算公式d=10^(lgN^N-lg10N^N)取整,代码如下: ? ?? #include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int main() { int t,N; double x=0; cin>>t; while(t--) { cin>>N; x=N*log10((double)N); x=x-(int)x; x=(int)pow(10,x); cout<<x<<endl; } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |