C++ 长整型溢出

C++ 长整型溢出,c++,storage,overflow,C++,Storage,Overflow,在这种情况下,我面临一个溢出问题,得到的输出为7392445620511834112,我想将b和c的两个大值相乘,并存储该值 #include<bits/stdc++.h> using namespace std; #define ll long long int int main() { ll b=1000000000000000000; ll c=2000000000000000000; ll out=b*c; cout<<out; }

在这种情况下,我面临一个溢出问题,得到的输出为
7392445620511834112
,我想将b和c的两个大值相乘,并存储该值

#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int main()
{
    ll b=1000000000000000000;
    ll c=2000000000000000000;
    ll out=b*c;
    cout<<out;
}
#包括
使用名称空间std;
#定义ll long long int
int main()
{
ll b=10000000000000000000000;
ll c=20000000000000000000;
ll out=b*c;

cout如果您从
long
更改为
unsigned long
,您可能会更接近。如果您不关心绝对精度,您可以在这里使用浮点类型,即使是
float
也足以以
cout
正确显示输出的方式存储输出,但大小不同d数字或以其他方式处理输出时,您可能希望使用
double
long double
以获得更大的尺寸和精度。
不要听所有人都说你做错了,他们整天都在堆栈交换上争论这类事情。你怎么做很好,否则它就无法编译。

?10000000000000000乘以20000000000000000000大于10^18。实际上20000000000000000000本身大于10^18。“it is provided”是什么意思?另请参见:并且不要对常见的标准类型使用类型别名(或者更糟糕的是,使用宏)。这样的宏并不会使您的代码更易于阅读或更快。事实上,所显示的大多数代码都显示出一些不良习惯的迹象,这些不良习惯通常是在所谓的“竞争”中教授的网站。不要用这些网站来学习任何东西,这不是他们的目的。去上课。一般来说,你就是这样学习C++和编程的。