李亚鹏什么吸引了周迅:c语言 高手求助!!!

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 19:19:36
有c言语高手吗??

求阶乘的和。 2!+4!+6!+..+16! 用do while 和for语解啊 ???

我想了1天了。。还会是不会啊 。。。。郁闷中。。。。

#include <stdio.h>

main() {
long sum = 0; // 和
int cnt = 2; // 计数器
long f = cnt; // 阶乘
while (cnt <= 16) {
f *= cnt;
cnt ++;
if (cnt % 2 == 0) {
sum += f;
}
}
printf("sum = %ld", sum);
}
注:本程序没有使用递归,因此是最高效的。又:楼上的程序有语法错误。

这个因为结果太大,所以要高精度乘法。

对一楼说:
16!的结果是 20922789888000 啊!
你居然用整型数据,不溢出才怪!

对于这样的问题,主要是要考虑益处的问题,上面的代码写的很清楚了。的确是可以运行的,不过是不是要考虑到long型也会益处的问题。我是想用字符串数组来解决该问题也许更好。如果需要解决更大的数的阶乘的计算。那么就可以使用链表来解决。
我曾经做过一个程序,是求两个整数的和。我是用嵌套结构体,加双向链表来实现的,虽然比较麻烦,但是可以计算任意长度的数的相加。
这个问题的解决方法就是用上面的代码也能完成的,不过没有扩展性。

用字符和数字之间的关系来出来该类问题才是最好的。

#include <stdio.h>

main() {
long sum = 0; // 和
int cnt = 2; // 计数器
long f = cnt; // 阶乘
while (cnt <= 16) {
f *= cnt;
cnt ++;
if (cnt % 2 == 0) {
sum += f;
}
}
printf("sum = %ld", sum);
}