C语言:求1!-2!+3!-4! +……+49! -50!的和。

求1!-2!+3!-4!+……+49!-50!的和!高手帮忙!要可行的!急啊,最好是完整的,复制到TURBOC中就能运行的... 求1!-2!+3!-4! +……+49! -50!的和!
高手帮忙!要可行的!
急啊,最好是完整的,复制到TURBOC中就能运行的
展开
 我来答
yuxichu
2006-06-12 · TA获得超过130个赞
知道答主
回答量:132
采纳率:100%
帮助的人:0
展开全部
50!是一个多达64位十进制整数,
无论是int或_int64的数据类型都装不下50!
下面的程序使用一个int[50]的数组存储运算结果,
其中每个元素存储4位十进制数。

通过修改N为其它值可以求其它的表达式的值。

祝你好运!

==========================================================

/**求1!-2!+3!-...+(+|-)N!,结果存储在整数数组中,其中数组第一个元素存储数组的长度*/
#define N 50
#define BASE 10000
void fac()
{
int tmp[N],plus[N],minus[N],*p,*q;
int i,j,k;
//初始化数组
for(i=0;i<N;i++)
{
tmp[i]=0;
plus[i]=0;
minus[i]=0;
}

tmp[N-1]=1;
plus[N-1]=1;

for(i=2;i<=N;i++)
{
//求i!
for(j=0;j<N;j++)
{
tmp[j]*=i;

k=j;
while(tmp[k]>=BASE)
{
tmp[k-1]+=tmp[k]/BASE;
tmp[k]%=BASE;
k--;
}

}

//求1!+3!+...或2!+4!+...
p=(i&1)?plus:minus;
for(j=0;j<N;j++)
{
p[j]+=tmp[j];

k=j;
while(p[k]>=BASE)
{
p[k-1]+=p[k]/BASE;
p[k]%=BASE;
k--;
}
}
}

if(N&1)//N是奇数,结果应为正
{
p=plus;
q=minus;
}
else//N是偶数,结果应为负
{
p=minus;
q=plus;
}

//求差,p中的值比q中的值大
for(i=0;i<N;i++)
{
p[i]-=q[i];
j=i;
while(p[j]<0)
{
p[j--]+=BASE;
p[j]--;
}
}

//输出结果
for(i=1;i<=N;i++)
{
if(i==1)
{
printf("%d!",i);
}
else if(i&1)
{
printf("+%d!",i);
}
else
{
printf("-%d!",i);
}
}
printf(" = ");

if((N&1)==0)//N是偶数,结果应为负
{
printf("-");
}

for(i=0;i<N;i++)
{
if(p[i])break;
}

printf("%d",p[i++]);

for(;i<N;i++)
{
j=BASE/10;
while(j)
{
printf("%d",(p[i]/j)%10);
j/=10;
}
}
printf("\n\n");
}
寻越默1878
2006-06-12 · 超过54用户采纳过TA的回答
知道答主
回答量:140
采纳率:0%
帮助的人:171万
展开全部
上面的程序有几个问题
一是越界,50!早就超过int的表示范围
二是效率低,四个for循环
三是结果不正确,每个for(k=1;k<=i;k++)前都没有把设tem = 1

#include <stdio.h>

int main()
{
double sum = 0;
double tmp = 1;
int mul = 1;
int i;
for(i=1;i<=50;i++)
{
tmp *= i;
sum += tmp*mul;
mul *= -1;
}
printf("1!-2!+3!-4!+.....+49!-50! = %e",sum);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秘和洽宏如
2019-06-29 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:35%
帮助的人:780万
展开全部
50!是一个多达64位十进制整数,
无论是int或_int64的数据类型都装不下50!
下面的程序使用一个int[50]的数组存储运算结果,
其中每个元素存储4位十进制数。
通过修改N为其它值可以求其它的表达式的值。
祝你好运!
==========================================================
/**求1!-2!+3!-...+(+|-)N!,结果存储在整数数组中,其中数组第一个元素存储数组的长度*/
#define
N
50
#define
BASE
10000
void
fac()
{
int
tmp[N],plus[N],minus[N],*p,*q;
int
i,j,k;
//初始化数组
for(i=0;i
=BASE)
{
tmp[k-1]+=tmp[k]/BASE;
tmp[k]%=BASE;
k--;
}
}
//求1!+3!+...或2!+4!+...
p=(i&1)?plus:minus;
for(j=0;j
=BASE)
{
p[k-1]+=p[k]/BASE;
p[k]%=BASE;
k--;
}
}
}
if(N&1)//N是奇数,结果应为正
{
p=plus;
q=minus;
}
else//N是偶数,结果应为负
{
p=minus;
q=plus;
}
//求差,p中的值比q中的值大
for(i=0;i
评论
0
0
0
加载更多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吨半
2006-06-12 · TA获得超过360个赞
知道小有建树答主
回答量:360
采纳率:0%
帮助的人:63.2万
展开全部
main(){
double a=1,i,m=0;
for(i=1;i<=50;i++)
{a*=i;
m+=a;
}
printf("1!-2!+3!-4!+.....+49!-50!=%g",m);
getch();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1a99b66
2006-06-12 · 超过11用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:0
展开全部
main()
{
int i,j,k,sum;
int a=1;
int b=1;
int tem=1;

for(i=1;i<=49;i+=2)
{
for(k=1;k<=i;k++)
{tem=tem*k;}
a=a+tem;
}
for(j=2;j<=50;j+=2)
{
for(k=1;k<=j;k++)
{tem=tem*k;}
b=b+tem;
}
sum=a-b;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式