用for和while循环求e的值[e=1+1/1!+1/2!+1/3!+1/4!+1/5!+...+1/n!]

/*编敲代码,依据下面公式求e的值。

要求用两种方法计算:
1)for循环。计算前50项
2)while循环,直至最后一项的值小于10-4
e=1+1/1!+1/2!+1/3!+1/4!+1/5!+...+1/n!
*/
#include<stdio.h>
//=====================================================
//用for求e的值
double For()
{
	double sum=1,temp=1;
	int i;
	for(i=1;i<50;i++)
	{
		temp/=i;
		sum+=temp;
	}
	return sum;
}
//=====================================================
//用while循环求e的值
double While()
{
	double sum=1;//首项设置为1
	double temp = 1;
	int i=1;
	while(temp>=1e-4)
	{
		//【e=1+1/1!+1/2!+1/3!+1/4!+1/5!+...+1/n!】
		temp = temp/i;//第二项1/1,即1/1!;第三项1/2,即1/2!;第四项(1/2)/3,即1/3!...
		sum = sum+temp;
		i++;
	}
	return sum;//返回sum
}
//主函数
int main()
{
	double a = For();
	double b = While();

	printf("用for循环求出e的前50项的和是%lf\n",a);
	printf("用while循环求出e和是%lf\n",b);
	return 0;
}
时间: 2024-12-20 09:03:49

用for和while循环求e的值[e=1+1/1!+1/2!+1/3!+1/4!+1/5!+...+1/n!]的相关文章

不用while if 循环求 1到n的和,还用到了!!这样的运算符

很好的题目.开始我也没有想出来. 不用while if 循环求 1到n的和 给了很多种解法,第一种是构造函数,然后累加static变量 第二种是虚函数,有父类子类,父类的结束,然后用 !!n来让 n不为0,都调用 数组下标[1]的,为0都调用[0]的. 第三种,函数指针类似虚函数,一个数组,两种函数指针,用!!n来分别调用. 第四种,利用模板偏特化来处理.但是编译器,对于递归深度有限制,所以n不能太大,不如上面几种方法通用.

二维数组循环求出最大子数组

package shengcheng; import java.util.Scanner; import org.junit.Test; public class ErweiXunhuan { @Test public void fun() { int [][]a=new int[4][8]; Scanner write=new Scanner(System.in); for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { a[i][j]=write.nex

用递归下降分析求表达式的值

<数据结构>中表达式求值的经典算法是用两个栈,一个存数字,一个存运算符.依次读入表达式中的每个字符,若是数字则进数字栈,若是运算符则和运算符栈的栈顶运算符比较优先权作相应操作,直至整个表达式求值完毕.运算符的优先级表如下   + - * / ( ) # + > > < < < > > - > > < < < > > * > > > > < > > / > >

树状数组求区间最值

树状数组求区间最值 树状数组(Binary Index Tree)利用二进制的一些性质巧妙的划分区间,是一种编程,时间和空间上都十分理想的求区间和的算法,同样我们可以利用树状数组优美的区间划分方法来求一个序列的最值 约定以 num[]  表示原数组, 以 idx[] 表示索引数组, Lowbit(x)=x&(-x) 树状数组求和时通过构造数组 idx[] 使 idx[k]=sum(num[tk]), tk [k-Lowbit(k)+1,k], 使用同样的方法构造最值索引数组: 以最大值为例, 先

mybatis循环取序列,值相同问题处理

猜是缓存原因,因为代码肯定没问题,但是不管怎么查都是同一个值 <select id="querySeq" resultType="java.lang.Long" > SELECT SEQ_OR_TEMP_DETAIL.NEXTVAL FROM DUAL </select> 后来增加useCache="false" flushCache="true" 禁用mybatis缓存后成功增长序列 只写入useCa

C++ 二分查找 求最近的值

上代码: <span style="font-size:18px;"> #include <iostream> #include <math.h> using namespace std; int BinarySearch(float *array, int aSize, float key) { if ( array == NULL || aSize == 0 ) return -1; int low = 0; int high = aSize -

求表达式的值--栈和队列的应用

1 #include<stdio.h> 2 #include<stdlib.h> 3 4 #define OK 1 5 #define ERROR 0 6 #define STACK_SIZE 20 7 #define STACK_INCREMENT 10 8 #define QUEUE_SIZE 20 9 10 typedef int Status; 11 12 typedef char StackElemtype; 13 typedef struct Stack{ 14 Sta

《用C++语言编写一个程序,求PI的值》

1 //编写一个C++程序求PI的值 2 /* 3 PI=16arctan(1/5)-4arctan(1/239) 4 其中arctan用如下形式的极数计算: 5 arctan=x-(x^3/3)+(x^5/7)-(x^7/7)+... 6 */ 7 #include<iostream> 8 using namespace std; 9 double arctan(double x){ 10 double sqr = x*x; 11 double e = x; 12 double r = 0;

hdu 5443 (2015长春网赛G题 求区间最值)

求区间最值,数据范围也很小,因为只会线段树,所以套了线段树模板=.= Sample Input3110011 151 2 3 4 551 21 32 43 43 531 999999 141 11 22 33 3 Sample Output1002344519999999999991 1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # include <algorithm>