You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++阶乘程序输出科学计数法而非整数值问题求解(Ubuntu20.04)

问题原因
  • 你代码中使用long double(浮点类型)存储阶乘结果,C++标准库的std::cout默认对超出普通浮点显示范围的数值会自动切换为科学计数法输出。
  • 另外std::cout默认对浮点类型只保留6位有效数字,导致12!的尾数被截断,才会出现和实际整数值479001600不符的显示问题。
解决方法

这里提供两种常用可行方案:

方案1:调整浮点输出格式

如果需要保留long double的存储逻辑,引入<iomanip>头文件,用std::fixed(固定小数格式)和std::setprecision(控制输出精度)修改输出规则即可,修改后代码示例:

#include <iostream>
#include <iomanip> // 新增格式控制头文件

int main()
{
    int n;
    long double factorial = 1.0;

    std::cout << "Enter a positive integer: ";
    std::cin >> n;

    if (n < 0)
        std::cout << "Error! Factorial of a negative number doesn't exist.";
    else
    {
        for (int i = 1; i <= n; i++)
        {
            factorial *= i;
        }
        // 调整输出格式:固定小数显示,精度设为0即不展示小数部分
        std::cout << "Factorial of " << n << " = " << std::fixed << std::setprecision(0) << factorial;
    }

    return 0;
}

方案2:改用整型存储阶乘(更推荐)

阶乘结果均为正整数,使用整型存储可以从根本上避免浮点精度损失和格式异常问题,不同整型可支持的最大阶乘如下:

  • 32位有符号int:最大支持12!
  • 64位有符号long long:最大支持20!
  • 需要计算更大阶乘需自行实现大整数运算或引入第三方大整数库

修改为long long存储的代码示例:

#include <iostream>

int main()
{
    int n;
    long long factorial = 1; // 替换为整型存储

    std::cout << "Enter a positive integer: ";
    std::cin >> n;

    if (n < 0)
        std::cout << "Error! Factorial of a negative number doesn't exist.";
    else
    {
        for (int i = 1; i <= n; i++)
        {
            factorial *= i;
        }
        std::cout << "Factorial of " << n << " = " << factorial;
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者M. Marayef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:45:03