我的for循环问题

时间:2016-08-10 05:15:12

标签: c++ loops

所以我正在为Uni制作一个因子重复计划,而且我没有经常使用for循环,

这个想法是你输入一个正数,它会为你做计算, 例如如果选择了数字5,它将执行以下操作:

1 * 2 * 3 * 4 * 5 = 120,它适用于我的大多数输入但是当我通过1时它没有正确

只是想知道是否有人知道我的foor循环有什么问题。

#include <iostream>
using namespace std;

int main() {


    int i, n, factorial = 1;

    cout<<"Enter a positive integer: ";
    cin>>n;
    if (n<=0) {

        cout << "Please enter a non-negative number!!!\n";
    }

    else {

    for (i = 1; i <=n; ++i) {
        factorial *= i;   // factorial = factorial * i;
    }

    cout<< "Factorial of "<<n<<" = "<<factorial;
    return 0;

    }
}

我也在计划,当数字太大时,它会进入科学记数法,但我需要先让它工作。

当我输入9时,它会正确地进行计算:

1*2*3*4*5*6*7*8*9 = 362880 

我打印它的方式是:

Enter a non-negative integer:
9! = 362880

当我输入大于12的数字时,例如13我得到了

Enter a non-negative integer:
13! = 1932053504

答案是错的,我也需要它:

Enter a non-negative integer:
13! = 6.22702e+09

干杯。

4 个答案:

答案 0 :(得分:3)

查看此链接以查看每个数据类型范围(类型为int的最小值和最大值): http://www.tutorialspoint.com/cplusplus/cpp_data_types.htm 对于科学记数法,请检查: http://www.cplusplus.com/reference/ios/scientific/ 另请查看此链接以了解溢出的概念: http://www.cplusplus.com/articles/DE18T05o/

答案 1 :(得分:1)

这是因为13的输出值超过insert into list (id) select id from node where uin_title = 'Control' (4字节)的MAX值并导致整数溢出。

考虑将signed int更改为int(8字节)

long long int

答案 2 :(得分:0)

您可以使用long int,您将获得最多20个正确的值!左右。

答案 3 :(得分:0)

使用unsigned long long int

#include <iostream>
using namespace std;

// Input validation
int getNumber() {
    int n;
    do {
        cout << "Enter a non-negative number!\n";
        cin >> n;
    } while (cin && n < 0);
    return n;
}

int main() {
    int n = getNumber();
    unsigned long long factorial = 1;   // Maximum possible
    for (int i = 1; i <= n; ++i)
        factorial *= i;
    cout<< n << "! = " << factorial;
    return 0;
}

输入

  

13

输出

  

13! = 6227020800

请参阅Ideone DEMO

编辑:如果您需要科学记数法,请使用long double或流式格式标记,例如std::scientific。您还可以使用cout.precision method设置精度。