首页 > 解决方案 > long long int 不支持大数的乘法

问题描述

我正在尝试执行一个简单的长乘法,但它没有显示正确的输出。这是示例代码

'''
#include<iostream>
using namespace std;
int main ()
{
    long long int c=100000*90000;
    cout<<c;
    return 0;
}
'''

变量 c 的 cout 是:41006540​​8

我不知道为什么它显示垃圾值而不是 9000000000。

标签: c++

解决方案


在具有 32 位的平台上int100000并且90000int类型(请注意,在具有 16 位的平台上,int它们将是long类型,并且与我在这里介绍的类似分析将适用于 32 位long。)

因此,您将两种int类型相乘。您正在溢出int, 结果未定义,尽管 9000000000 - 41006540​​8 是 2 32的倍数并非巧合(但不要依赖它,因为它只不过是未定义行为的表现)。

100000LL * 90000

是一个修复。


推荐阅读