这两个C语言程序的结果为何不同望详细解答

来源:百度知道 编辑:UC知道 时间:2024/06/03 20:04:03
#include"stdio.h"
void main()
{float s=0,m=1;
for(n=1;n<=20;n++)
{
m=m&n;
s=s+m;
}
printf("1!+2!+…20!=%e\n",s);
}
将改程序FOR语句中m=m*n ;s=s+m调换后回出现不同结果是为什么

m=m*n;
s=s+m;
求的s是1!+2!+…20!的值

s=s+m; //1!+2!+…19!
m=m*n; //这里的m=20! 并没有加到s里面去
求的s是1!+2!+…19!的值

所以 当然不一样了
如果你觉得懂了 就给我分吧

的确是我看错了,不好意思!

楼上瞎说,人家都说了是乘法了,你还“与”呢
再说了,要与的话怎么样都是1,因为m=1,跟n怎么与都是1
楼主hi我
我和你说

这个手动循环两次就看出来了,要先乘。
另外,20!的阶乘太大了,超出了float所能精确表示的整数范围。

下面有个能精确计算的,供参考。输入20即为解。

#include<stdio.h>

int mul(int arr[],int n,int len)
{
int i,c=0;
for (i=0; i<len; i++)
{
arr[i]=arr[i]*n+c;
c=arr[i]/10;
arr[i]%=10;
}
while (c!=0)
{
arr[i++]=c%10;
c/=10;
}
return i;
}

int add(int a[],int n,int b[],int m)
{
int i,c=0;
for (i=0; i<m; i++)
{
a[i]+=b[i]+c;
c=a[i]/10;
a[i]%=10;
}
while (c!=0)
{
a[i]+=c;