鲍勃迪伦永远年轻歌词:试编程计算1!+2!+3!+|、、、、+20!

来源:百度文库 编辑:神马品牌网 时间:2024/04/20 22:09:02
我提的问题是C语言方面的问题

double fun(int i)
{
int j;
double re=1;
for(j=2;j<=i;j++)
re = re*j;
printf("%lf\t",re);
return re;
}
void main()
{
int i;
double result=0;
for(i=1;i<=20;i++)
result=result+fun(i);
printf("%lf\n",result);
}
已在我的机子上编译通过。

p=1,m=0;
for(i=1;i<=20;i++)
{
p=p*i;
m=m+p;
}

p=1,m=0;
for(i=1;i<=20;i++)
{
p=p*i;
m=m+p;
}

基本肯定是超过了double的长度了

1 先做一个无限位的乘法加法
2 再按上面的做法

在32位系统下,用long int类型,不会溢出。上面的代码是可行的。

我也凑着热闹编个求1!+2!+……+1000!的值的程序,呵呵,关键是充分考虑到关于overflow的问题。
#include<math.h>
#include<stdio.h>
long sum1(long n)
{
long i;
double ln=0;
for(i=1;i<=n;i++)
ln+=log10(i);
i=(long)ln;
return i;
}
double sum2(long n)
{
long i;
double ln=0;
for(i=1;i<=n;i++)
ln+=log10(i);
i=(long)ln;
ln=pow(10,ln-i);
return ln;
}
int main()
{
long j;
long k=0;
double s=0;
for(j=1;j<=1000;j++)
{
k+=sum1(j);
s+=sum2(j);
}
printf("1!+2!+……+1000!=%lf*10^%ld\n",s,k);
getch();
return 0;
}