2014-01-14 2 views
0

제목과 마찬가지로 n 숫자의 합계를 계산할 수 있습니까 : 1+(1/2!)+...+(1/n!)?합계 1+ (1/2!) + ... + (1/n!)을 계산하십시오

#include <stdio.h> 

int main(void) 
{ 
    int v=0,i,ch; 
    double x=0.; 

    printf("Introduce un número paracalcular la suma: "); 

    while(scanf("%d",&v)==0 || v<=0) 
    { 
     printf("Favor de introducir numeros reales positivos: "); 

     while((ch=getchar())!='\n') 
      if(ch==EOF) 
       return 1; 
    } 

    for (i=v; i>=1; i--) 
     x+=1./i; 

    printf("EL valor de la serie es %f\n", x); 
    getch(); 
    return 0; 

} 

여기 질문은 다음과 같습니다 : 이미 비율로 합계를 얻었으나, 어떻게 내가 변수를 계산할 수 있습니다 "내가"팩토리얼 는 이미 고조파 시리즈의 코드를 가지고?

참고 : DEV-C++ 4.9.9.2

답변

0

AC = 1과 C 언어의 프로그래밍 미안; (i = n; i> 0; i--)에 대한 ac = ac/i + 1;

은 계승 계산을 저장하고 반올림 오류를 방지합니다.

1

일반적으로 재귀 적 방법을 통해 계승 함수를 만들 수 있습니다. 참고 : $$ n! = \ left \ { \ begin {array} {lr} : n = 1 \\ n (n-1)! & : n \ end {array} \ right. $$

나는이 $ 뭔가 같은

public int Factorial(int n)  
{ 
     return (n == 1 ? 1 : n * Factorial(n - 1)); 
} 
+0

, 이것은 대수를 통해 수행되어야한다. 또한 코드를 훨씬 빠르게 만들기 위해 $ n $의 큰 값에 대해 Stirling의 근사값을 매우 정확하게 사용할 수 있습니다. –

2

N $ 20 주변에 비해 $ 더 큰, $ 그냥 수학 상수 $ 전자를 사용합니다. $ $ (20) 아래에 $ 정말 '아무튼를 의미 할 것 같아요 당신이하는 일에 상관 없습니다.

0

재귀 및 계승이 없습니다.

출력
double fraction=1, sum=0; 
long i,n; 
for(i=1;i<=n;i++) 
    sum+=(fraction/=i); 

: 정수에 저장된 비트가 충분하지 않다 또한 에러에 더 민감하기 때문에 $ $ N의 큰 값들에 대한

n=1 
sum=1 

n=2 
sum=1.5 

n=3 
sum=1.666666666 

n=1073741824 
sum=1.71828182845904553488480814849026501178741455078125 
관련 문제