C ++:如何使用cout

时间:2016-10-04 03:31:31

标签: c++

我编写了一个代码来获取C ++中的数字的阶乘。

这是代码。

 #include <iostream>

 using namespace std;

 unsigned long long getFactorial(int);

 int main(int argc, char **argv) {
         int num = 5;
         unsigned long long factorial = getFactorial(a);

         cout << "Factorial of " << num << ": " << factorial << endl;

         return 0;
 }

 unsigned long long getFactorial(int num) {
         int i;
         unsigned long long factorial = 1;
         for(i=1; i<=num; i++) {
                 factorial *= i;
         }

         return factorial;
 } 

当我为num值分配5时,它会正确打印出正确的值120.但是当我分配更大的数字时,例如100,它只打印出0.如何修改代码到在控制台上正确打印出结果?

1 个答案:

答案 0 :(得分:1)

现在我自己找到了答案。

通过使用gmp库,处理大整数变得更加容易。

这是修改后的代码。

#include <iostream>
#include <gmpxx.h>

using namespace std;

mpz_class getFactorial(int);

int main(int argc, char **argv) {
        int num = 100;
        mpz_class factorial = getFactorial(num);

        cout << "Factorial of " << num << ": " << factorial << endl;

        return 0;
}

mpz_class getFactorial(int num) {
        int i;
        mpz_class factorial = 1;
        for(i=1; i<=num; i++) {
                factorial *= i;
        }

        return factorial;
}

为了使用gmp库,我添加了<gmpxx.h>头文件。接下来,我将factorial变量的数据类型和getFactorial()函数的返回类型从unsigned long long更改为mpz_class,这是表示大整数的数据类型。< / p>

修改代码后,我使用以下标志与GCC编译。

$gcc test.cpp -lstdc++ -lgmpxx -lgmp -o test

使用-lgmpxx库编译代码需要-lgmpgmp标志。

现在工作正常。