我编写了一个代码来获取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.如何修改代码到在控制台上正确打印出结果?
答案 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
库编译代码需要-lgmp
和gmp
标志。
现在工作正常。