首页 > 解决方案 > 与 int 相比,double 数据类型如何在 C++ 中大量改变答案?

问题描述

我正在解决一个问题“计算阶乘中的位数”,并将答案存储在 int 和 double 两种数据类型中。两种数据类型的答案不同,存储在 double 中的答案最终是正确的。这是怎么回事?

这是代码:

        int n;
        cin>>n;
        double ans;
        int ans_int;
        double digits = 0;
        int digit_int = 0; 
        for (int i = 1; i<=n; i++) {
            digits += log10(i);
            digit_int += log10(i);
        }

        ans = floor(digits)+1;

        ans_int = floor(digit_int)+1; // This gives wrong answer. 

        cout<<ans<<endl;

如果在上面的代码中,我将数字设为 int,而不是 double,我得到的答案是 1 位,5!而不是 3,在其他情况下类似。

标签: c++typesdoublefactorialdiscrete-mathematics

解决方案


问题出在这一行:digit_int += log10(i);. 当i小于 10 时,其对数将小于 1。将小于 1 的整数加到整数上将有效地加零。


推荐阅读