C语言:求1!-2!+3!-4! +……+49! -50!的和。
求1!-2!+3!-4!+……+49!-50!的和!高手帮忙!要可行的!急啊,最好是完整的,复制到TURBOC中就能运行的...
求1!-2!+3!-4! +……+49! -50!的和!
高手帮忙!要可行的!
急啊,最好是完整的,复制到TURBOC中就能运行的 展开
高手帮忙!要可行的!
急啊,最好是完整的,复制到TURBOC中就能运行的 展开
5个回答
展开全部
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");
}
无论是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");
}
展开全部
上面的程序有几个问题
一是越界,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);
}
一是越界,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);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
加载更多
无论是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
加载更多
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();
}
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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
{
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询