c语言 1到20的阶乘之和

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 1到20的阶乘之和相关的知识,希望对你有一定的参考价值。

//c4-8.c
#include<stdio.h>
int main ()
int i,p,sum=0;
for(i=1;i<=20;i++)
while(i>=1)
p=1;
p*=i;
i-=1;

sum+=p;

printf("sum=%d\n",sum);
return 0;

错在哪

/**
**程序描述:求求1~20的阶乘之和。
**算法思路:先求出每一项的阶乘值,然后将所有项的阶乘值相加。
*/
#include <stdio.h>
#define N 20
typedef unsigned long long uInt64;  //自定义类型
//求出每一项阶乘值的函数
uInt64 fact(int n)

    int i;
    uInt64 s;
    for(i=s=1;i<=n;i++)
        s*=i;   //从1开始循环累加相乘
    return s;

 
int main()

    uInt64 s;
    int i;
    for(i=1,s=0;i<=N;i++)
        s+=fact(i);     //从第1项开始循环累加每一项的阶乘值
    printf("1!+2!+3!+……+20!=%llu\\n",s);
    return 0;

参考技术A

i始终大于1,会出现死循环的,同时,20的阶乘相加,那结果会很大的,用int保存不下,得用double类型!示例代码,有问题再用度娘自己搜索吧。。

//win7 x64 + vc6.0编译通过
#include<stdio.h>
#include "stdlib.h"
int main()

double fac(int n);
double sum=0,m;
    int i;
for(i=1;i<=20;i++)
m=fac(i);
sum+=m;
printf("%0.lf\\n",sum);
system("pause");

double fac( int n)

double m;
if (n==1)
m=1;
else m=fac(n-1)*n;
return(m);

参考技术B 你的程序有点乱,也有的错的地方,比如一开始的int unit51()不应该是int main()吗?还有倒数第三行printf("1到20的阶乘和为:\n",sum);也是错的,应该改为printf("1到20的阶乘和为:%d\n",sum);但是貌似这样最后输出的也只有一个数而不是1到20的阶乘,最后一点,20的阶乘是一个非常大的数,用int根本不行。程序就不给你改了,需要的话我给你写一个。 参考技术C #include<stdio.h>void main()

int i;
double t=1,sum=0; //由于20的阶乘int和long int都放不下.所以用double.
for(i=1;i<=20;i++) //从1循环到20.

t = t * i; //计算1~20的阶乘.
sum = sum + t; //将1~20的阶乘累加到sum中.

printf("%.0f\n",sum); //输出sum.
参考技术D 2432902008176640000
请按任意键继续. . .

代码:
#include<stdio.h>
#include "stdlib.h"
int main()

double fac(int n);
double sum=0,m;
int i;
for(i=1;i<=20;i++)
m=fac(i);
sum+=m;
printf("%0.lf\n",sum);
system("pause");

double fac( int n)

double m;
if (n==1)
m=1;
else m=fac(n-1)*n;
return(m);


你求的是阶乘的累加和。20项很大了,查过了整形的范围了。用double就可以了。
在就是 递归表达式:
n==1 return 1
else
return n*f(n-1)

C 语言编程系列

目录

文章目录

语法入门

C 语言编程 — 发展历史概览
C 语言编程 — 配置开发环境
C 语言编程 — HelloWorld

C 语言编程 — 数据类型概览
C 语言编程 — 基本数据类型
C 语言编程 — 指针类型 — 指针(pointer)
C 语言编程 — 构造数据类型 — 数组(array)
C 语言编程 — 构造数据类型 — 字符串(string)
C 语言编程 — 构造数据类型 — 结构体(struct)
C 语言编程 — 构造数据类型 — 位域(bit field)
C 语言编程 — 构造数据类型 — 枚举(enum)
C 语言编程 — 构造数据类型 — 共用体(union)
C 语言编程 — 空类型 — void 类型
C 语言编程 — 自定义类型 — typedef
C 语言编程 — 数据类型转换

C 语言编程 — 变量、常量与作用域
C 语言编程 — 函数
C 语言编程 — 运算符
C 语言编程 — 逻辑控制语句
C 语言编程 — 预处理指令与宏定义
C 语言编程 — 头文件

C 语言编程 — 代码规范
C 语言编程 — 基本语法练习

应用进阶

C 语言编程 — 指令行操作
C 语言编程 — 输入输出操作
C 语言编程 — errno 错误操作
C 语言编程 — assert 断言操作
C 语言编程 — stat 文件操作

C 语言编程 — 内存操作

C 语言编程 — semaphore 信号量操作
C 语言编程 — fork 进程操作
C 语言编程 — pthread 线程操作
C 语言编程 — 线程池设计与实现

深入理解

C 语言编程 — GCC 程序编译原理
C 语言编程 — GCC 程序汇编原理
C 语言编程 — GCC Attribute 语法扩展
C 语言编程 — GCC 内存对齐问题
C 语言编程 — GCC 大端小端问题
C 语言编程 — GDB 程序调试
C 语言编程 — Makefile

用 C 语言开发一门编程语言

用 C 语言开发一门编程语言 — Lispy 功能演示
用 C 语言开发一门编程语言 — 交互式解析器
用 C 语言开发一门编程语言 — 语法解析器运行原理
用 C 语言开发一门编程语言 — 波兰表达式解析器
用 C 语言开发一门编程语言 — 表达式存储器
用 C 语言开发一门编程语言 — 符号表达式解析器
用 C 语言开发一门编程语言 — 引用表达式解析器
用 C 语言开发一门编程语言 — 变量的设计与实现
用 C 语言开发一门编程语言 — 基于 Lambda 表达式的函数设计与实现
用 C 语言开发一门编程语言 — 条件分支的设计与实现
用 C 语言开发一门编程语言 — 字符串的设计与实现
用 C 语言开发一门编程语言 — 更好的语言

C 语言网络编程

互联网协议 — TCP — 报文格式
互联网协议 — TCP — TCP 连接(三次握手、四次挥手)
互联网协议 — TCP — 确认与重传
互联网协议 — TCP — 滑动窗口
互联网协议 — TCP — 流量控制
互联网协议 — TCP — 拥塞控制
C 语言网络编程 — BSD Socket API
C 语言网络编程 — PF_INETv4v6 sockets
C 语言网络编程 — Socket I/O 模式
C 语言网络编程 — Linux I/O 处理流程与优化
C 语言网络编程 — 高并发 TCP 网络服务器

互联网协议 — HTTP 协议与 Web 服务器
互联网协议 — HTTP/1.1 版本
互联网协议 — HTTP/2 版本
C 语言网络编程 — 轻量级 HTTP 服务器设计与实现

以上是关于c语言 1到20的阶乘之和的主要内容,如果未能解决你的问题,请参考以下文章

c语言 1到20的阶乘之和

1到20的阶乘之和用C程序有点问题~哪为高手解决下

C语言1到20的阶乘

C语言,算1到20阶乘的和

C语言求阶乘倒数之和

用C语言 从一的阶乘加到二十的阶乘