问题 H: N的N次方
时间限制: 1 Sec 内存限制: 32 MB
提交: 55 解决: 15
[提交][状态][讨论版]
题目描述
现给你一个正整数N,请问N^N的最左边的数字是什么?
输入
输入包含多组测试数据。每组输入一个正整数N(N<=1000000)。
输出
对于每组输入,输出N^N的最左边的数字。
样例输入
3
4
样例输出
2
2
题意概括:
给出一个小于1000000的任意整数N的,然后求出N的N次方的最高位是多少。
解题思路:
因为N^N可以写作a*10^k的形式,输出强制转化为整形的a就表示的最高位,然后比如说3*3*3=27,就可以写作2.7*10^1的形式。所以k就代表的是结果的位数-1,所以k=(int)log10(n^n)+1-1。因为n^n=a*10^k所以log10(n^n)=log10(a)+log10(10^k).可以知道n*log10(n)=log10(a)+k,所以a=10^(n*log10(n)-k)。
错误分析:
这题刚开始我就以为是一道直接写的题,然后我看肯定要超出限制的,所以我直接就没有写了然后听学长讲解了一下才理解这道题的意思。
#include <stdio.h>
#include <math.h>
int main()
{
int i,k;
double n,a;
while(scanf("%lf",&n)!=EOF)
{
k=n*log10(n);
a=pow(10,(n*log10(n))-k);
printf("%d\n",(int) a);
}
return 0;
}