C语言求1到20的阶层之和这个程序为什么不对?

作者&投稿:诺谦 (若有异议请与网页底部的电邮联系)
C语言求1到20阶层的和,输出时为什么用%lf~


因为输出的是double型数据
阶乘数值比较大用int型变量存放不下

自己自定义数据结构,使用链表等可以,只是麻烦一些,自己写过的函数由于计算机的原因,算不出1000!,不过991!还是可以算出,大概写了200+行代码

程序没有问题,但是你没有考虑溢出的问题,一个整形变量在VC中占用4个字节,也就是32位,第一位为符号位,那么多大的数也只是011。。。。。。1(31个1),也就是2的32次方减1,你算的是阶乘,增长速度是非常快的,也许你觉得5的阶乘,6的阶乘这些都不大,但是10的阶乘之后这些结果会变得非常非常大了,所以你用整形变量是无法表示的。

程序没问题 ,但所求的数已经超过定义的整型,甚至是无符长整型,就是放不下了。数字太大了、

#include <stdio.h>
void main()
{
int i=1,j=1;
long s=0,k=1;//这里
for(i=1;i<=20;i++)
{
k=1;
for(j=1;j<=i;j++)
{
k=k*j;
}
s=k+s;
}
printf("%ld\n",s);
}

int i, j, temp = 1;
int sum = 0;

for (i = 1; i < 20; i++)
{
for (j = 1; j <= i; j++)
{
temp *= j;
}
sum += temp;
temp = 1;
}
printf("%d",sum);

k,s已经超过定义的整型,另外要多注意些程序的排序和格式,呵呵,太不讲究了


求1到20的阶乘之和的c语言程序怎么编写?
int i; for(i=1;i<=20;i++) { j=jiecheng(i); k+=j; } printf("%ld\\n",k); } 扩展资料: 用递归方法 #include<stdio.h> int func(intn){ int m=0; if(n==1){ return1; } m=n*func(n-1); returnm; } int main(intargc,constchar*argv[]){ int sum=0; for(inti=1;i<=...

跪求:编写c语言程序,求1到20的阶乘之和
long jiecheng(int x){ long int i,k=1;for(i=1;i<=x;i++)k=k*i;return k;} int main(){ long int j,k=0;int i;for(i=1;i<=20;i++){ j=jiecheng(i);k+=j;\\t } printf("%ld\\n",k);} 输出的结果是2561327494111820313 ...

C语言:求解1-20的阶乘累加的和!
main(){ float s=0,t=1; int n; for(n=1;n<=20;n++) { t=t*n; \/*求n!*\/ s=s+t; \/*将各项累加*\/ } printf("1!+2!+...20!=%e\\n",s);}

用C语言求1~20的阶乘之和!
**算法思路:先求出每一项的阶乘值,然后将所有项的阶乘值相加。*\/#include <stdio.h>#define N 20typedef unsigned long long uInt64; \/\/自定义类型\/\/求出每一项阶乘值的函数uInt64 fact(int n){ int i; uInt64 s; for(i=s=1;i<=n;i++) s*=i; \/\/从1开始循环...

利用C语言求阶乘 例如求20! 用循环和函数两种方法……
20的阶乘太大了,我求的是10的阶乘,你要很想求20的阶乘的话就用 long double试试#include<stdio.h>int main(){int i, k=1;for(i=1;i<=10;i++){k=k*i;}printf("k!=%d",k);return 0;} 下面是调用函数的#include<stdio.h>int jiecheng(int a){ int i,k=1; for(i=1;i<=a;i++) ...

求个C语言程序:将1到20的阶乘累加
将1到20的阶乘累加的C语言程序如下:include<stdio.h> include<string.h> long long getdata(long long n){ long long sum = 1;while(n){ sum*=n--;} return sum;} int main(){ long long sum = 0;long long nums = 20;while(nums){ sum+=getdata(nums--);} printf("%lld",su...

求1到20的阶乘和,用c语言编程
include <stdio.h> main(){ double res=1.0;int i;for(i=1;i<=20;i++){ res*=i;} printf("result=%lf",res);}

用c语言编程,求从1的阶乘一直加到20的阶乘。
1、首先打开C语言编辑器,新建一个c语言的文件,导入头文件并设置一个主函数:2、程序中设置一个循环的临时变量和接受阶乘和的sum变量,循环中先遍历出20以内的数字子,然后计算每个数的阶乘,在将它们相加起来,因为是一个非常大的数,所以这里sum是double类型的,最后把结果输出就可以了:3、最后调试...

1到20阶乘的和用c语言表达
include <stdio.h> long jiecheng(int x){ long int i,k=1;for(i=1;i<=x;i++)k=k*i;return k;} int main(){ long int j,k=0;int i;for(i=1;i<=20;i++){ j=jiecheng(i);k+=j;} printf("%ld\\n",k);}

求1到20的阶乘和,,用C语言怎么整,,请高手来看看,,我这个对不??谢了...
应该是这样 include<stdio.h> void main(){ int i=1,j=2,sum=0;do { sum=sum+i;\/\/sum应该在里面加,而且要在前面,否则你就漏掉了1的阶乘 i=i*j;j++;}while(j<=20);printf("sum=%d\\n",sum); \/\/最后要输出sum,而不是i } ...

长宁区17249995817: C语言求1 - 20的阶乘之和 -
占辰诺正: /* sum = 2561327494111820313 Press any key to continue */1 2 3 4 5 6 7 8 9 10 11#include <stdio.h>intmain() {__int64fact = 1,i,sum = 0;for(i = 1; i < 21; ++i) {fact *= i;sum += fact;}printf("sum = %I64d\n",sum);return0; }

长宁区17249995817: 求个C语言程序:将1到20的阶乘累加 -
占辰诺正: #includemain() { double res=1.0; int i; for(i=1;i

长宁区17249995817: 跪求:编写c语言程序,求1到20的阶乘之和
占辰诺正: 只是将上面仁兄的稍改了一下而已 #include <stdio> void main() { int t=1; int s = 0; for(int i=1;i<=20;i++) { t=t*i; s=s+t; } printf("%d", s); }

长宁区17249995817: C语言中怎样用for循环语句编程1至20的阶层之和 -
占辰诺正: 使用int必定是要溢出的,可以把楼上的result定义换成long long或double.给出1个递归版本:long long clac(int n){ assert(n 0); if(n == 1) return 1; else return n*calc(n⑴);}开消可能略大.

长宁区17249995817: C语言,算1到20阶乘的和 -
占辰诺正: s*=i相当于s=s*i,假如某一次循环中i=k(k代表某个自然数),s=S那么执行完s*=i后s=S*k;下一次循环时i=k+1,执行完s*=i后s=S*k*(k+1).而初始情况是i=1,s=1,根据数学归纳法可以推导出s中保存的值是1*2*...*(k+1).

长宁区17249995817: 用c语言编程,求从1的阶乘一直加到20的阶乘. -
占辰诺正: #include<stdio.h> void main() { float a,b,s,sum; sum=0; for(a=1;a<=20;a++) { for(s=1,b=1;b<=a;b++) s=s*b; sum=sum+s; } printf("%e\n",sum); }先求出第n项阶乘,然后把前n-1项阶乘的和加上第n项.

长宁区17249995817: 求1到20的阶乘和,,用C语言怎么整,,请高手来看看,,我这个对不??谢了 -
占辰诺正: 用递归调用吧最简单 int fan(int a) { sum+=20*fan(a-1); } 考试必考,最后用fun(20),但要sum在外面定义就出来了

长宁区17249995817: 用C语言/*求1+2!+3!+...+20!的和*/ -
占辰诺正: 1、首先,定义三个整型变量,保存项数、算式的总和、每一项的和. 2、接着,将算式的总和设置为0. 3、读入算式的项数,保存在变量n中. 4、用for循环判断,条件是i的值小于等于n,即实现各项的总和. 5、在每次执行外侧循环时,设置sum2的初始值为0. 6、用for语句执行内部的循环,计算每一个小项的和. 7、运行程序,观察结果.

长宁区17249995817: C语言输出20之内的阶乘之和代码 -
占辰诺正:#includeint main() {__int64 fact = 1,i,sum = 0;for(i = 1; i fact *= i;sum += fact;}printf("sum = %I64d\n",sum);return 0; } 类型必须设置为__int64 或者long long 否则会溢出 你的代码就是这样 会溢出的

长宁区17249995817: c语言 1到20的阶乘之和 -
占辰诺正: i始终大于1,会出现死循环的,同时,20的阶乘相加,那结果会很大的,用int保存不下,得用double类型!示例代码,有问题再用度娘自己搜索吧.. //win7 x64 + vc6.0编译通过 #include<stdio.h> #include "stdlib.h" int main() { double fac(int n...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网