如何使用cout正确打印long long int类型

C++: How to properly print out the long long int using cout

本文关键字:long int 类型 打印 何使用 cout      更新时间:2023-10-16

我用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;
 } 

当我将5赋给num值时,它正确地打印出正确的值120。但是当我赋值更大的数字时,比如100,它只是输出0。如何修改代码以正确地在控制台上打印结果?

现在我自己找到了答案。

通过使用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,即表示大整数的数据类型。

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

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

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