我在试着解决一个关于codeforce的问题。我必须提供输入
1000000000 1000000000 1 添加到此代码
#include <iostream>
using namespace std;
int main()
{
long n,m,a;
cin >> n >> m >>a ;
long b,c;
b = (n%a==0)?(n/a):((n/a)+1);
c = (m%a==0)?(m/a):((m/a)+1);
unsigned long long d ;
d = b*c ;
cout<<d;但它给了我错误
Diagnostics detected issues [cpp.clang++-diagnose]: p71.cpp:12:5: runtime error: signed
integer overflow: 1000000000 * 1000000000 cannot be represented in type 'long'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior p71.cpp:12:5 in然后我知道我应该在一个数值型文字上加上ULL后缀。但是我应该如何在这种类型的代码中使用ULL;
发布于 2021-07-11 22:31:03
在after变量中应该在哪里使用ULL?
不能在变量后使用ULL。它是整型文字的后缀。您应该在那些您希望为unsigned long long类型的整型文字之后使用ULL,因为后缀就是这样做的。
所有整数类型都有一个上限(以及下限)。确切的最大值是特定于每个系统的,尽管语言标准确实指定了一个下限作为要求。如果您知道计算将超过特定类型的限制,则必须使用更大的类型。如果您不知道计算的最大结果,或者您知道它将超过最大整数类型的限制,那么您必须改变策略,而不是使用普通整数类型:相反,您需要使用任意精度的算术。
发布于 2021-07-11 22:43:51
...在after变量中,我应该在哪里使用ULL?
ULL不适用于变量。
=左侧的类型不会影响右侧的计算。
long b, c;
...
unsigned long long d;
d = b*c; // long multiplication and long product.为了从unsigned long long的潜在扩展范围中获益,请确保long long乘法。不同的方法。
d = b; // in 2 steps
d *= c;
d = (long long) b * c; // Cast
d = 1LL * b * c; // let compiler form effect code 请注意,当b或c为负时,上述第一个结果与第二个和第三个结果不同。
https://stackoverflow.com/questions/68337104
复制相似问题