BIT1046 Leftmost Digit:
http://blog.csdn.net/zhangwei1120112119/article/details/8565684
本人代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#define pi acos(-1.0)
#define e exp(1.0)
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int i,j,k;
double temp=0,n;
scanf("%lf",&n);
if(n>10)
{
temp=log10(sqrt(2*pi*n))+n*log10(n/e);
}
else
{
for(i=1;i<=(int)n;i++)
{
temp+=log10(i*1.0);
}
}
temp-=(int)temp;
double te=pow(10.0,temp);
printf("%d\n",(int)te);
}
}
同理:HDU 1060 Leftmost Digit
本人代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#define pi acos(-1.0)
#define e exp(1.0)
#define ll long long
int main()
{
int t;
scanf("%d",&t);
int n;
while(t--)
{
int i,j,k;
double temp=0;
scanf("%d",&n);
temp=n*log10(n*1.0);
temp-=(ll)temp;
double te=pow(10.0,temp);
printf("%d\n",(ll)te);
}
}
本文介绍了两种求解左数(即阶乘结果的最左边非零数字)的算法实现。一种适用于大于10的整数,利用斯特林公式进行近似计算;另一种则通过直接计算较小整数的阶乘来获取结果。这两种方法都使用了对数转换来避免大数运算,最终通过取模运算找到最左侧的非零数字。

692

被折叠的 条评论
为什么被折叠?



