c++ - 与 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,在其他情况下类似。
解决方案
问题出在这一行:digit_int += log10(i);
. 当i
小于 10 时,其对数将小于 1。将小于 1 的整数加到整数上将有效地加零。
推荐阅读
- python - 如何正确使用 wtforms 验证器?
- mysql - 创建数据库
- android - 在设置中关闭键盘选择器图标的 ADB 命令是什么?
- oracle - 将逻辑实体的名称更改为标题大小写 (Oracle SDDM)
- python - 在普通 Python 中找到最小的浮点数
- javascript - 参数太多的函数。如何使用和调用对象字面量作为参数
- javascript - 如何导出一个类的单个实例并在多个文件中导入同一个实例?
- ffmpeg - 为什么在 libavfilter 中存在 vaapi 过滤器,但在我编译的 ffmpeg 版本中不存在?
- typescript - 在另一个 Observable 的数组项中映射一个 Observable,将结果展平
- python - 无法导入 pytrends?