代码如下:
#include <stdio.h>
long long jc(int n)
{
long long s = 1;
int i;
for(i=1;i<=n;i++)
s*=i;
return s;
}
double power(int n)
{
double s=1.0;
int i=0;
for(;i<n;i++)
s/=10;
return s;
}
int main()
{
double e=0;
double r2=1,ex;
int k;
char c ;
while(1)
{
c = getchar();
if(c>=1 && c<=18)
break;
}
ex = power((int)c)/2;
k = 0;
while(1)
{
r2 = (double)(k+1)/jc(k);
if(r2 < ex )
break;
e += r2;
k++;
}
e/=2.0;
switch((int)c)
{
case 1:
printf("%.1lf",e);break;
case 2:
printf("%.2lf",e);break;
case 3:
printf("%.3lf",e);break;
case 4:
printf("%.4lf",e);break;
case 5:
printf("%.5lf",e);break;
case 6:
printf("%.6lf",e);break;
case 7:
printf("%.7lf",e);break;
case 8:
printf("%.8lf",e);break;
case 9:
printf("%.9lf",e);break;
case 10:
printf("%.10lf",e);break;
case 11:
printf("%.11lf",e);break;
case 12:
printf("%.12lf",e);break;
case 13:
printf("%.13lf",e);break;
case 14:
printf("%.14lf",e);break;
case 15:
printf("%.15lf",e);break;
case 16:
printf("%.16lf",e);break;
case 17:
printf("%.17lf",e);break;
case 18:
printf("%.18lf",e);break;
}
return 0;
}
前面是求和,后面是计算阶乘。
#include <stdio.h>
int main()
{
int n,i=1;
long long k=1;
double item = 1;
double res = 1;
while(1)
{
scanf("%d",&n);
if(n>=1 && n<=18)
break;
}
while(item >= 1e-6)
{
k*=i;
item = (i+1.0)/k;
res += item;
i++;
}
res = res/2;
printf("%d.",(int)res);
item = res - (int)res;
for(i=0;i<n;i++)
item *= 10;
printf("%lld",(long long)item);
return 0;
}