错误的输出 - 拉马努金阶乘和C++的近似
Wrong output - Ramanujan's approximation of factorial and C++
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
int n, k, g;
float fact;
cin >> n;
fact = sqrt(3.14159265359)*pow(n/2.7182818284, n);
fact *= pow(((8*n + 4)*n + 1)*n + (float)1/30, (float)1/6);
k=floor(fact);
g=k%1000000000;
cout << g << "n";
};
我的程序计算 n! 模数 10000000000 的值。对于 n 的小值,它工作得很好。但是对于较大的,它会不断输出-147483648。我的代码有什么问题?
这是
变量fact
上的溢出问题,您可以超过float
可以容纳的最大值。
实际上,更大的类型,如long double
和long long int
不会保存这些巨大的值,你需要更大的类型。
我建议通过将 1 循环到 n 来解决它,在每次迭代时相乘并应用 mod。这将使数量保持较小。
拉马努金的阶乘近似在这里对你没有帮助,因为它不考虑模优势,你可以试试威尔索姆定理
相关文章:
- 在 C++ 中的数组上使用阶乘函数
- 阶乘问题在 c++ 中给出错误的输出
- 大数的阶乘给出错误的输出
- 什么模板用法在阶乘中更好
- 为什么我在C++阶乘函数中出现编译错误?
- 计算阶乘的 C++17 倍表达式中的错误
- 为什么 Lisp 中 1000 阶乘的计算如此之快(并显示正确的结果)?
- 在C++中执行 N 阶乘编译时间的 3 种不同/相同方法
- 平方模型为零,阶乘模型问题
- 阶乘元规划
- 阶乘-c++ 我想以不同的方式打印
- 阶乘函数只返回C++中输入的答案
- 阶乘使用循环递增给出垃圾值
- 大 n 表示阶乘
- 为什么我不能在非常量表达式上使用此模板阶乘函数?
- 计算最大数字的阶乘
- 这个阶乘程序内部发生了什么?
- 返回阶乘C++的递归函数
- C++ 中是否有任何内置阶乘函数?
- 高效计算阶乘