题目大意:
计算n^n的最左边的那个数的大小。
解题思路:
m = n ^ n,把m化成10的double次方。然后分解为整数部分跟小数部分,取小数部分计算。即pow(double(10), decimals), C++中pow函数如果第二个参数是double型的,那么第一个参数也是double型的,而且返回值也是double型的,注意下。还有化解的时候num * log10(num)这个时候int会溢出,所以强制类型转换的时候要用__int64
吐吐槽:
这道题目好久以前就做过了,可是还是忘记了,重新做了一遍,以此为训。
代码:
#include
#include
using namespace std;
int main(void)
{
int n;
scanf("%d", &n);
while(n--)
{
int num;
scanf("%d", &num);
double b = (double)num * log10((double)num);
double decimals = b - (__int64)b;
printf("%d\n", (int)pow((double)10, decimals));
}
return 0;
}