这道题一开始看到数很大,马上就想到是大数的问题,然后做了一个__int64的一个表,发现二十多就很不准了,然后就一直以为是大数的问题。练习的时候发现会做的5道题已经做完了,在做也没意思了就开始去网上查答案,然后发现~是一道很明显的数学问题。
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1060
我们可以这么考虑,一个数用科学计数法可以记做a1*10n1, ,同样numnum= a*10n,
也就是说我们需要求的就是a整数部分,这样用数学的取对数我们可以得到
x= num*lg(num) = n+lg(a);
所以lg(a) = x-n,也就是说,a = 10(x-n)
代码如下
View Code
#include<math.h> #include<stdio.h> int main() { double x,t; __int64 num; scanf("%lf",&t); while(t--) { scanf("%I64d",&num); x = num*log10(num*1.0); x -= (__int64)x; int a = (int) pow(10.0,x); printf("%d\n",a); } return 0; }