C ++程序不返回正确的因子值

时间:2017-03-10 03:33:31

标签: c++ return factorial

我对C ++很新,并且正在尝试编写一个程序,该程序使用Do-While循环来计算从1到n的和,其中n是输入参数,并在for循环中使用阶乘函数计算n的阶乘。但是,在编译程序时,我得到的结果如下:

从1到n的总数(在本例中n为5)是001ED2A8或其他奇怪的数字和字母组合。我的因子结果也发生了同样的事情。我很感激能得到的任何和所有帮助。以下是我到目前为止的情况:

#include "stdafx.h"
#include <iostream>
using namespace std;

int total(int);
int factorial(int);

void main()
{
    int n;
    cout << "Please enter a positive number:";
    cin >> n;
    cout << "The total from 1 to " << n << "is " << total << endl;
    cout << "The factorial of " << n << " is: " << factorial << endl;
}

int total (int n)
{
    int i, total;

    total = 0;
    i = 1;
    do
    {
        total = total + i;
        i = i + 1;
    } while (total <= n);
    return total;
}

int factorial (int n)
{
    int product = 1;

    for (;n>0; n--)
    {
        product = n * product;
    }
    return product;
}

3 个答案:

答案 0 :(得分:0)

long factorial (int n)
{
if (n >= 1)
    return n*factorial(n-1);
else
    return 1;
}

或用于循环如下

for(i=1,f=1;i<=n;i++)
{
   {f=f*i;}
}

答案 1 :(得分:0)

使用时

cout << "The total from 1 to " << n << "is " << total << endl;

等同于

int (*function_ptr)(int) = total;
cout << "The total from 1 to " << n << "is " << function_ptr << endl;

您正在将函数指针传递给operator<<,而不是通过调用函数返回的值。

在该上下文中,函数指针被转换为布尔值true。因此,该调用等同于:

cout << "The total from 1 to " << n << "is " << true << endl;

下一行也会发生同样的事情。

要打印这些函数返回的值,您必须进行函数调用。使用:

cout << "The total from 1 to " << n << "is " << total(n) << endl;
cout << "The total from 1 to " << n << "is " << factorial(n) << endl;

此外,您应该将main的返回值更改为int

int main()
{
   ...
}

答案 2 :(得分:0)

To use a for loop as follows: 
int f=1, i=1;
for(i=1,f=1;i<=n;i++)
{
   {f=f*i;}
}