EOJ 1074 第一位数字

EOJ 1074 第一位数字
这道题告诉我一个深刻的道理,那就是程序员的数学必须要好。否则到后面做算法优化一定不行。
这题可以和上次那个短信验证码对照看看。

这道题的N^N,显然不能用单纯的pow。

我们先来分析一下。
EOJ 1074 第一位数字
EOJ 1074 第一位数字
到了这里是不是就非常简单呢?
我的程序里面x,y和我的分析里面是相反的。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
long long n,result;
double x,y;
while(scanf("%lld",&n)!=EOF&&n!=0)
{
x=n*log10(n);
y=(long long)x; // 取整数部分
x=x-y; //取小数部分
result=(long long)pow(10.0,x);
printf("%d\n",result);
}
return 0;
}

让我惊奇的是C里面log居然可以直接用,这说明我的见识太短浅了。