乘以 100 万

Multiplying 1 million

为什么要这样做:

int a = 1000000 , b = 1000000;
long long product = a * b;
cout<<product;

它给出了一些随机的垃圾值?为什么 a 和 b 都需要 long long 才能计算它?

这会很好用。当您对 intint 进行乘法运算时,如果超出限制,则将其放入 long long 变量中,然后将结果与 1ll1LL 相乘。当您将结果与 1ll 相乘时,结果会在产品本身的计算过程中转换为 long long。

int a = 1000000 , b = 1000000;
    
long long product = 1ll * a * b;
    
cout << product;

您正在观察 undefined behavior 的影响。这个:

a * b   

int 类型的(算术)表达式,因为操作数 ab 都是 int 类型。尝试将 1000000000000 的值存储到 int 中会导致所谓的 有符号整数溢出 ,这是未定义的行为。

要么将其中一个操作数转换为 long long,从而导致整个表达式 to become long long,它足够大以接受 1000000000000 的值:

#include <iostream>

int main()
{
    int a = 1000000, b = 1000000;
    auto product = static_cast<long long>(a) * b;
    std::cout << product;
}

或定义其中一个操作数为long long:

#include <iostream>

int main()
{
    long long a = 1000000;
    int b = 1000000;
    auto product = a * b;
    std::cout << product;
}

可以选择使用 unsigned long