鱼C论坛

 找回密码
 立即注册
查看: 423|回复: 3

输出不对

[复制链接]
发表于 2024-4-7 10:40:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <iostream>
using namespace std;
int main()
{
  long long sum=(20230408*20230409)/2;
  cout<<sum;
  return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-7 10:40:19 | 显示全部楼层
你好!在你的代码中,你没有完成cout语句。为了输出结果,请添加以下代码:
cout << sum << endl;

这样,你就能正确输出结果啦!完整的代码如下:
#include <iostream>
using namespace std;

int main()
{
    long long sum = (20230408 * 20230409) / 2;
    cout << sum << endl;

    return 0;
}

希望能帮助到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-7 11:07:39 | 显示全部楼层
本帖最后由 jackz007 于 2024-4-7 11:56 编辑
  long long sum = (20230408 * 20230409) / 2;
        编译器会为之部署 32 位乘法,会导致计算结果溢出,应该改为
  long long sum = (20230408ll * 20230409ll) / 2;
        编译器会特意为之部署 64 位乘法,计算结果不会溢出。
        'll' 为两个小写的英文字母 'L'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-7 15:56:41 | 显示全部楼层
本帖最后由 sinychen 于 2024-4-7 15:58 编辑

这段代码本身没有语法错误,并且会成功编译和运行。然而,从数值计算的角度来看,这段代码可能会遇到整数溢出的问题。

在C++中,long long类型通常能够存储的整数范围是 -9223372036854775808 到 9223372036854775807。当你计算 20230408 * 20230409 时,结果是 4108690822032572,这确实是在long long类型的范围内。

但是,当你将这个结果除以2时,理论上应该得到 2054345411016286,这个数也仍然是在long long的范围内。然而,问题出在除法运算的精度上。在C++中,整数除法会向下取整,这意味着 4108690822032572 / 2 的结果将是 2054345411016286,但由于整数除法的特性,你可能不会得到预期的结果。

为了避免这种情况,你可以先将乘积转换为double或long double类型,然后再进行除法运算。这样可以确保得到精确的浮点结果,之后再将其转换回long long(如果需要的话)。

这里是修改后的代码示例:

cpp
#include <iostream>
using namespace std;

int main()
{
    // 使用double类型进行计算以避免整数除法的问题
    long long sum = static_cast<long long>((static_cast<double>(20230408) * static_cast<double>(20230409)) / 2);
    cout << sum << endl;

    return 0;
}
在这个修改后的版本中,我们首先将两个整数转换为double类型,进行乘法运算和除法运算,然后再将结果转换回long long类型。static_cast用于执行类型转换。这样可以确保计算的精度,并且避免潜在的整数溢出问题。不过在这个特定的例子中,由于结果仍然在long long的范围内,所以溢出并不是一个问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 21:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表