为什么使用int错误,但很长的权利

out*_*ers 3 c long-integer

int c;
long long sum=0;
sum+=c*(c-1)/2;
Run Code Online (Sandbox Code Playgroud)

当c = 100000时,为什么总和无法得到正确的答案?我应该写sum + =(long long)(c*(c-1)/ 2);

Wil*_*l A 5

int这是32位我假设 - 100000平方(10E9)超过int导致溢出的最大范围.以下内容可行 - 将第一个实例转换clong long将意味着表达式的其余部分将是"long long compatible".

sum+=((long long)c*(c-1)/2);
Run Code Online (Sandbox Code Playgroud)