编写程序:1到20阶乘之和

作者&投稿:诏冠 (若有异议请与网页底部的电邮联系)
用c语言编程,求从1的阶乘一直加到20的阶乘。~

1、首先打开C语言编辑器,新建一个c语言的文件,导入头文件并设置一个主函数:

2、程序中设置一个循环的临时变量和接受阶乘和的sum变量,循环中先遍历出20以内的数字子,然后计算每个数的阶乘,在将它们相加起来,因为是一个非常大的数,所以这里sum是double类型的,最后把结果输出就可以了:

3、最后调试编译程序,就会看到输出的20阶乘内的和了,是一个非常大的数。以上就是用c语言求20以内阶乘和的方法:

给你个通用的。运行后输入20

记得多加点分


#define M 20000 /* 最大结果位数,DOS能访问的内存有限,最好不要超过 30000 位*/
#define N (M+5)
main()
{
int Num;
register int i,j,k,flag;
register unsigned int n,m,pc;
unsigned char str_n[5],result_0[N],result_1[N];
void fun_print_result(char *result,int flag);
int fun_mul(char *a,char *b,char *c,int flag);

printf("输入计算其阶乘的数:Num = ");
scanf("%d",&Num);

if(Num >= 100)
{
printf("
正在进行阶乘运算. . .
");
printf("已完成 00000 的阶乘,请等待. . .");
}

for (j=0;j<N;j++)
{
result_1[j] = 0; result_0[j] = 0;
}
result_1[N-1] = 1;
for(i=0;i<5;i++)
{
str_n[i] = 0;
}

n = 1;
pc = 0; flag = N-1;
while (n <= Num)
{
m = n;
k = 4;
while(m > 0)
{
str_n[k] = m%10; m /= 10; k--;
}
if (pc%2 == 0)
{
if(fun_mul (str_n,result_1,result_0,flag) != 1)
{
printf("

结果溢出!当前所设置的最大结果为 %d 位 已完成 %d 的阶乘",M,pc);
exit(0);
}
}
else
{
if(fun_mul (str_n,result_0,result_1,flag) != 1)
{
printf("

结果溢出!当前所设置的最大结果为 %d 位 已完成 %d 的阶乘",M,pc);
exit(0);
}
}

flag = flag-(4-k); /* flag 标记相乘后“可能的”第一个有效数字的标号 */

if(pc%2 == 0) /* 再处理一次使 flag 正好标记第一个有效数字的标号 */
{
if(result_0[flag] == 0) flag++;
}
else
{
if(result_1[flag] == 0) flag++;
}
n++; pc++;
if((pc)%25 == 0 && Num >= 100 && pc >= 100)
{
printf("已完成 %5d",pc);
}
}
if(Num >= 100) printf("
");
if ((pc-1)%2 == 0)
{
fun_print_result (result_0,flag);
}
else
{
fun_print_result (result_1,flag);
}
}

int fun_mul(char *a,char *b,char *c,int flag) /* 相乘函数 */
{
register int i,j;
for(j=flag;j<N;j++) c[j]=0;
for(i=4;i>=0;i--)
{
if(a)
{
for (j=N-1;j>=flag;j--)
{
if(b[j])
{
c[i+j-4] += a[i]*b[j];
}
if(c[i+j-4] > 9)
{
c[i+j-5] += c[i+j-4]/10; c[i+j-4] %= 10;
}
}
}
}
if(flag < 10)
{
if (c[0] || c[1] || c[2] || c[3] || c[4]) /*** 结果溢出判断 ***/
{
return 0;
}
}
return 1;
}

void fun_print_result(char *result,int flag) /* 输出结果函数 */
{
int p;
printf("
本次计算结果共有 %d 位,如下:

",N-flag);
for(p=flag;p<N-1;p++)
{
printf("%d",result[p]);
if((p+1-flag)%(21*80) == 0)
{
printf("
计算结果太长,请按任一键看下一屏,Esc 退出");
if(getch() == 27)
{
clrscr(); exit(0);
}
clrscr();
}
}
printf("%d",result[N-1]);
printf("

[OK]");
}

这是个JAVA程序!
public Num{ //创建类
public static void main(String[] args){//程序入口
int m=0;
for(int i=1;i<=20;i++){//循环1-20的数
int n=1;
for(int j=i;j>0;j--){//循环求该数的阶乘
n*=j;
}
m+=n;//把所有的数加起来
}
}
}

#include"stdio.h"
void main(){
int n=1,i,sum=1;
for(i=1;i<=20;i++){
n*=i;
sum+=n;
}
printf("result is %d",sum);
}//C环境

#inculde<iostream.h>
main
{ int s=0;
int w=0;
for(int i=1;i,=20;i++)
{
s=i*s;
w=w+s;
}
cout<<"1到20的阶乘之和为:"<<w<<endl;
retnrn 0;
}

编译环境是Turb C++,用VC也可以。其他的环境可能不一样。

pascal语言的
program jieche;
var sum:real;
i,j:integer;
begin
sum:=0;j:=1;
for i:=1 to 20 do
begin
j:=j*i;
sum:=sum+j;
end;
wtriteln(sum);
readln;
end.
其实用什么语言写都一样的,主要是算法问题,这个算法应该比楼上的快一点。


用C语言编写程序:20∑n=1(n!),即1!+2!+3!+……+19!+20!(从1的阶乘一 ...
include<stdio.h> double factorial(int n);\/\/函数声明 int main( ){ int i = 0;const int MAX_NUM = 20;double sum = 0;\/\/求1!+2! +...+20!for (i=1; i<=MAX_NUM; i++)sum = sum + factorial(i);printf("1!+...+%d!=%.0f\\n",MAX_NUM, sum);\/\/输出结果信息 ...

C语言编程题,求1+2!+3!+...+20!的和,怎么做?
以下是用C语言编程求出1!+2!+3!+……+20!的值示例代码:include <stdio.h> int main(){ int i,j;long sum,k;sum=0;for(i=1;i<=20;i++){k=1;for(j=1;j<=i;j++){ k=k*j;} sum=sum+k;} printf("1+2!+3!+…+20!=%d",sum);} ...

改错,求1到20阶乘的和(不可增加或删除程序行,不可更改程序的结构...
include <stdio.h> void main(void){ int n,j;float s=0.0,t;\/\/t=1.0改成t,不改也行 for(n=1;n<=20;n++){ t=1;\/\/s=1;改成t=1;for (j=1;j<=n;j++)t=t*j;\/\/t=t*n;改成t=t*j;s=s+t;} printf("jiecheng=%22.2f\\n",s);} ...

编译程序:有20级台阶的楼梯,一次可以迈一级或两级台阶,那么爬完此楼...
include<stdio.h> int total=20;int result[21]={0};FILE *fp;int sum=0;test(int n){ int i;if(total==0){ printresult(n-1);sum++;return;} for(i=1;i<=2;i++){ result[n]=i;total-=i;if(total>=0)test(n+1);total+=i;} } main(){ if((fp=fopen("result.txt"...

1到20的阶乘之和用C程序有点问题~哪为高手解决下
很简单的问题,在C语言中,int(整型)数据有效范围是-32768——32767之间,而你求的是1到20的阶乘和,其结果早已经超过了整数最大值32767,不要说求和,就是20的阶乘本身也远远超过了32767,所以肯定是个错误答案,你可以试试把t和s定义为长整型(long)或者实型(float,double)。

此程序哪里出问题了,我想求1到20的阶乘并加起来
int32类型只能存储16以下的阶乘,20的阶乘需要把int类型的换成Int64类型的,你的问题是存储空间不够溢出了。n=0不能放进for循环里。

利用C语言求阶乘 例如求20! 用循环和函数两种方法……
对应程序如下:#include <stdio.h> #include <malloc.h> #define MAXN 1000 \/*factorial:求k的阶乘:连续加(k-1)次(k-1)!,便得到了k! 结果保存在数组a中。a[0]为结果的位数,其后 下标从小到大表示阶乘的低位到高位*\/void factorial(int a[],int k) { int *b,m=a[0],i,j,r,carry; b=(...

C语言:编写程序,求20的阶乘.
给你个通用的。运行后输入20 记得多加点分 define M 20000 \/* 最大结果位数,DOS能访问的内存有限,最好不要超过 30000 位*\/ define N (M+5)main(){ int Num;register int i,j,k,flag;register unsigned int n,m,pc;unsigned char str_n[5],result_0[N],result_1[N];void fun_...

c++程序求n的阶乘,不要c语言,n的范围是1到20
使用循环句句来进行迭代操作,最后所以和加载一起 ,得出阶乘的答案,望采纳

小名从1楼到2楼要走20阶台阶,从4楼到一楼那东西,又回4楼,一共走了多少...
从1楼到2楼要走20阶台阶,说明一层楼是20阶台阶。从4楼到一楼那东西,又回4楼,说明一次走了3层,一共走了2次。所以 (4-1)x2x20=3x40=120(阶)

始兴县17060108759: 1到20阶乘的和等于多少 -
岛怎速力:[答案] #include "stdio.h" void main() { int i; double s=0,x=1; for(i=1;i

始兴县17060108759: 1到20的阶乘的和怎么求?#include "stdio.h"void main(){int i,n;long fact=1,sum=0;scanf("%d",&n);for(i=1;i -
岛怎速力:[答案] long fact=1,sum=0;应该改为long double fact=1L,sum=0L;或者fact 和sum改为double型; long double 为常双精度型;你的结果有19位,long是不行的!long最多有十位!

始兴县17060108759: 跪求:编写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); }

始兴县17060108759: 用JAVA编写1到20的阶乘之和 -
岛怎速力: public static void main(String[] args) { int a=1;double j=1;double sum = 0;while (a<=20){ j=j*a;sum=sum+j;a++;}System.out.println(sum);} 值=2.5613274941118203E18 要考虑接收值的类型的取值范围.

始兴县17060108759: 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).

始兴县17060108759: 编程计算1 - 20的阶乘之和 -
岛怎速力: user830316 的不对,你只是算到了20的阶乘,并没有算1的阶乘到20的阶乘的和 Private Sub Form_Click() s = 1 For i = 1 To 20 s = s * i Sum = Sum + s Next i Print Sum End Sub

始兴县17060108759: 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; }

始兴县17060108759: Java编程求1到20阶乘的和 -
岛怎速力: public class gg { public static void main(String[] args) { int t,s; t=1;s=0; for(int i=1;i<=20;i++){ t*=i; s+=t; } System.out.println("s="+s); } }

始兴县17060108759: 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 否则会溢出 你的代码就是这样 会溢出的

始兴县17060108759: 用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项.

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