C语言编程求阶乘和: 1!+2!+3!+ ... + n!
儿童节快乐
Happy children's Day
求阶乘和
大家好,我是阿汤哥。先祝各位大朋友、小朋友六一节快乐!
今天我们用C语言来求阶乘和。
先给出定义:
一个正整数n的阶乘等于 1到这个数n之间(包括n)所有整数的乘积。
1! = 1
2!= 1 * 2;
3! = 1 * 2 *3;
...
n! = 1 * 2 * 3 * ... * n;
求解思路思路:
把这个问题分解,写一个函数,功能是求n的阶乘;再写另一个函数,求1到n之间所有数的阶乘的和。
代码
运行结果
注意
如果希望算更大的值的阶乘和,比如20,那么可以把result类型换成long long型。
(
long long的最大值:9223372036854775807
long long的最小值:-92233720368
)。
long long最大可以计算n=20的阶乘和,在n=21时,结果会溢出。如下图:
注意,如果你是用VC++6.0的话,在代码里使用long long类型,编译会报如下图的错误。为什么会报错呢?因为long long类型是在C99标准中才引入的,“99”指的是1999年。而微软的VC++6.0软件是1998年就发布了,是不支持C99标准的。
大家要用long long类型,需要使用其他至少支持C99的编程软件,比如codecblocks,Visual Studio 2019等。
为什么打印整形是%d 而不是 %i
我们平时用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
喜欢的话转发和在看哦!
扫描二维码
获取更多精彩