import java.io.*;
import java.util.*;
public class Solution
{
public static void main(String args[])
{
Scanner s=new Scanner(System.in);
int k=s.nextInt();
long value=0L;
value=(k-(k/2)) * (k/2);
System.out.println(value);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我输入的输入为1856378为k,
预期输出为861534819721
但是我得到了-1753606775
为什么在价值很长的时候给出错误答案
在表达中
(k-(k/2)) * (k/2)
Run Code Online (Sandbox Code Playgroud)
没有long涉及的值,只有int值.因此,没有提升价值int.我们只是int算术.你的范围有限int.
如果k被宣布为a long,事情会有所不同
long k = s.nextInt();
Run Code Online (Sandbox Code Playgroud)
同样,您可以将表达式的某个值转换或声明为a long.
value = (k - (k / 2L)) * (k / 2);
Run Code Online (Sandbox Code Playgroud)
但这可能取决于相关性和执行顺序.它可以在这里工作,但不一定在其他表达式中.
你正在分配给a long,但所有的算术都在完成int,因为表达式的每个部分(k-(k/2)) * (k/2)都是一个int.
最简单的解决方案是声明k为long例如
long k = s.nextInt();
long value = (k-(k/2)) * (k/2);
Run Code Online (Sandbox Code Playgroud)
你也可以2L在任何一个除法运算中使用文字 - 它只是你需要使用long算术完成的乘法运算.
值得注意的是,赋值运算符右侧的计算与它分配给它的任何内容完全不同.
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |