vlambda博客
学习文章列表

C语言编程求阶乘和: 1!+2!+3!+ ... + n!

This browser does not support music or audio playback. Please play it in WeChat or another browser.

儿童节快乐

Happy children's Day

C语言编程求阶乘和: 1!+2!+3!+ ... + n!



C语言编程求阶乘和: 1!+2!+3!+ ... + n!

求阶乘和

C语言编程求阶乘和: 1!+2!+3!+ ... + n!


C语言编程求阶乘和: 1!+2!+3!+ ... + n!

大家好,我是阿汤哥。先祝各位大朋友、小朋友六一节快乐!


今天我们用C语言来求阶乘和。

先给出定义:

一个正整数n的阶乘等于 1到这个数n之间(包括n)所有整数的乘积。

1! = 1

2!= 1 * 2;

3! = 1 * 2 *3;

...

n! = 1 * 2 * 3 * ... * n;

求解思路思路:

把这个问题分解,写一个函数,功能是求n的阶乘;再写另一个函数,求1到n之间所有数的阶乘的和。



C语言编程求阶乘和: 1!+2!+3!+ ... + n!




代码

C语言编程求阶乘和: 1!+2!+3!+ ... + n!
C语言编程求阶乘和: 1!+2!+3!+ ... + n!


C语言编程求阶乘和: 1!+2!+3!+ ... + n!





C语言编程求阶乘和: 1!+2!+3!+ ... + n!

运行结果

C语言编程求阶乘和: 1!+2!+3!+ ... + n!


C语言编程求阶乘和: 1!+2!+3!+ ... + n!



注意

C语言编程求阶乘和: 1!+2!+3!+ ... + n!
C语言编程求阶乘和: 1!+2!+3!+ ... + n!




C语言编程求阶乘和: 1!+2!+3!+ ... + n!
运行的时候注意n的范围,n太大了会运算结果会溢出。
如果定义的阶乘和result是long int类型(long int可表示的整数的范围: -2147483648~2147483647 ),那么n最大可以取12,在n=13的时候就会溢出:
C语言编程求阶乘和: 1!+2!+3!+ ... + n!


C语言编程求阶乘和: 1!+2!+3!+ ... + n!




C语言编程求阶乘和: 1!+2!+3!+ ... + n!

如果希望算更大的值的阶乘和,比如20,那么可以把result类型换成long long型。

long long的最大值:9223372036854775807


long long的最小值:-92233720368


54775808


long long最大可以计算n=20的阶乘和,在n=21时,结果会溢出。如下图:

C语言编程求阶乘和: 1!+2!+3!+ ... + n!
C语言编程求阶乘和: 1!+2!+3!+ ... + n!



C语言编程求阶乘和: 1!+2!+3!+ ... + n!

注意,如果你是用VC++6.0的话,在代码里使用long long类型,编译会报如下图的错误。为什么会报错呢?因为long long类型是在C99标准中才引入的,“99”指的是1999年。而微软的VC++6.0软件是1998年就发布了,是不支持C99标准的。


大家要用long long类型,需要使用其他至少支持C99的编程软件,比如codecblocks,Visual Studio 2019等。

C语言编程求阶乘和: 1!+2!+3!+ ... + n!
C语言编程求阶乘和: 1!+2!+3!+ ... + n!



为什么打印整形是%d 而不是 %i

C语言编程求阶乘和: 1!+2!+3!+ ... + n!
C语言编程求阶乘和: 1!+2!+3!+ ... + n!



C语言编程求阶乘和: 1!+2!+3!+ ... + n!

我们平时用printf函数打印整数,用的是%d。你可能会问:整型是int(英文单词integer的缩写),为什么整型的格式说明符不是%i?


这是因为计算机中对整数的表达,会很关注整数是用二进制、八进制、十进制还是十六进制的形式来表达。我们一般情况下,打印十进制,十进制的英文是decimal,所以输出十进制数的格式化说明符里取decimal的首字母,为%d。


另外,其实C语言里也有%i这个格式说明符,在printf函数里用%i和用%d,效果没有区别,都是以十进制形式打印。但它们在scanf函数的用法里有区别。


sacnf函数里,%d只认识十进制数。但%i可以根据输入的整数的进制形式,识别到你输入的八进制(数字0开头,比如011),十进制和十六进制(0x开头)。


不过,我们平时用printf打印十进制数时,还是推荐用%d。因为如果你习惯或者失误地在整数最前面误打了一个0,那会被误识别成了八进制。


不同整数进制的格式化说明符:

十进制:%d

八进制: %o       (取“八进制”的英文单词octal的首字母o)

十六进制(字母小写):%x   (取“十六进制”的英文单词hex中的字母x)

十六进制(字母大写):%X


C语言编程求阶乘和: 1!+2!+3!+ ... + n!




C语言编程求阶乘和: 1!+2!+3!+ ... + n!

喜欢的话转发和在看哦!


C语言编程求阶乘和: 1!+2!+3!+ ... + n!
C语言编程求阶乘和: 1!+2!+3!+ ... + n!

扫描二维码

获取更多精彩