ACM_Leftmost Digit
Posted 霜雪千年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM_Leftmost Digit相关的知识,希望对你有一定的参考价值。
Leftmost Digit
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
给定一个正整数N,你应该输出N ^ N的最左边的数字。
Input:
输入包含多个测试用例。 输入的第一行是单个整数T,它是测试用例的数量。 T测试用例如下。
每个测试用例都包含一个正整数N(1 <= N <= 10000)。 Hint:64位整数使用long long int,输入输出%lld.
Output:
对于每个测试用例,您应该输出N^N的最左边的数字。
Sample Input:
2 3 4
Sample Output:
2 2
解题思路:对一个数N,用科学计数法表示为N=a*10^m,此时a的整数部分即为N的最高位数字,N^N的最左边的数字a即为题目所求。
所以N^N=a*10^m,两边取对数得N*lg(N)=m+lg(a);因为0<a<10,所以0<lg(a)<1,令x=lg(a)+m(m为x的整数部分),x=N*lg(N);
则a=10^(x-m)=10^(x-(int)x),注意这里的N最大为10^4,即x=N*lg(N)=4*10^4,x小于int范围内,所以x强转为int即为m,最后输出(int)a整数部分即可。
pow(x,y)函数计算x的y次幂。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int T,N; 6 while(cin>>T){ 7 while(T--){ 8 cin>>N; 9 double x=N*log10(N); 10 double g=x-(int)x; 11 cout<<(int)pow(10,g)<<endl; 12 } 13 } 14 return 0; 15 }
以上是关于ACM_Leftmost Digit的主要内容,如果未能解决你的问题,请参考以下文章
errmsg bad digit "\" 解析端口 30000 代码 93