我已编写此代码以通过输入大小来获取斐波那契数字。 我得到的结果是正确的,但我唯一担心的是更高范围的输入值的某些值的负号。
1-我无法在代码中找到缺陷,如何摆脱输出中的负值。 2-为什么在一些负值之后有正值。 3-第一个负值是-1323752223然后是正数。
谢谢。
以下是代码:
import java.util.Scanner;
public class FibonacciSeries {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a, c = 0;
int result = 0;
int b = 1;
Scanner scan = new Scanner(System.in);
System.out.println("Enter the Number to display Fibonacci Series");
a = scan.nextInt();
System.out.println("Fibonacci Seriers is as follows");
for (int i = 1; i <= a; i++) {
System.out.print(" "+result+" ");
result = c + b;
b = c;
c = result;
}
}
}
答案 0 :(得分:0)
根据输入值,您可能超过整数可以容纳的最大值。
整数限制为2 ^ 31-1或2,147,483,647。一旦达到该阈值,该数字将环绕并以最小值-2 ^ 31或-2,147,483,648开始。
答案 1 :(得分:0)
嗯,你可以使用&#39;如果&#39;用于System.out.print以检查结果是否为负数或正数。你得到负值的原因是因为int只是&#34;只有&#34; 32位长。
你可以使用long而不是int,这会使它对Fib更好一些。顺序,但它不会解决你的实际问题 - 负数。
以下是代码:
for( int i = 1; i <= a; i ++ ) {
if( result >= 0 ) {
System.out.print(" " + result + " ");
}
result = c + b;
b = c;
c = result;
}
答案 2 :(得分:0)
尝试修改&#39; int&#39;的变量类型到了#long;&#39; long int&#39;或者&#39; unsigned int&#39;。也许高价值会修改符号位。