2016-11-24 79 views
0

我想创建一个程序,可以计算sin(x)给出x和值n从计算罪(x)得到一个奇怪的输出

我知道罪可以计算为:

x - x3/3! + x5/5! - x7/7! + x9/9!... 

但产量使我有同样数量的每一次:-2147483648

这里是我的代码:

#include <iostream> 
#include <cmath> 
using namespace std; 

int factorial(int); 

int main() { 

    int ans = 0; 
    double x = 0; 
    int n = 0; 

    cout << "Enter x value: "; 
    cin >> x; 
    x = x * (3.14159/180); 
    cout << endl; 
    cout << "Enter n value: "; 
    cin >> n; 

    ans = pow(x, 1 + (2 * n))/factorial(1 + (2 * n)); 

    cout << ans << endl; 

    return 0; 
} 

int factorial(int a) { 
    int facts = 0; 

    for (int i = 0; i <= a; i++) { 
     facts *= i; 
    } 
    return facts; 
} 
+1

第一次看'factorial()'告诉我它总是会返回'0',因为'int facts = 0;'应该是'int facts = 1;'。然后'main()'运行到一个零除...... – VCSEL

+0

此外'factorial()'中的循环应该以'for(int i = 2; ......'开始,出于同样的原因 – VCSEL

+0

也,有因式返回一倍,并且宣布事实是双重的,这将显着扩大产生可行因子的“a”的范围,留给OP的练习以说明在因子()失败之前“a”有多大。 – doug

回答

2

facts在你的函数factorial初始化为0,所以它总是返回0。它初始化为1。同去与你的循环开始为0,则乘以factsi=0。尝试:

int factorial(int a) { 
    int facts = 1; 

    for (int i = 2; i <= a; i++) { 
     facts *= i; 
    } 
    return facts; 
}