Java问题,代码贴在下面,对各位大神应该是非常容易的,指教一下呗

import java.util.Scanner;

public class Fibonacci数列 {

public static void Main(String[] args) {
    System.out.println("输入样例:");
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    sc.close();
    long a=1,b=1,sum=0;
    if (n>=1&&n<=1000000) {
        if (n==1||n==2) {
            System.out.println("输出样例:\n1");
        }else {
            for (int i = 3; i <=n; i++) {
                sum=a+b;
                a=b;
                b=sum;
            }
            System.out.println("输出样例:"+sum%10007);
        }
    }
}

}
如果我输入的n值很大很大,比如100000000000000000,然后程序就报错了,有什么方法避免报错吗?谢谢

用Bigdecimal

大数溢出了,要么限制输入,要么自己实现大数乘法的算法。

肯定会有问题,那么长的一个数据,一般用大数据类型处理BigInteger;参考一下这个:http://blog.sina.com.cn/s/blog_93daad41010115to.html

对于这么大的数,或许作者可以采用数组存储的方式

(一)如果只是想解决输入很多的书,会报错的问题,可采用try, catch捕捉异常。

public static void main(String[] args) {
System.out.println("输入样例:");
Scanner sc=new Scanner(System.in);

    int n;
    try{
        n=sc.nextInt();
    }catch(Exception e){
        System.out.println("您输入的样例过大!!!");
        return;
    }finally{
        sc.close();
    };

    long a=1,b=1,sum=0;
    if (n>=1&&n<=1000000) {
        if (n==1||n==2) {
            System.out.println("输出样例:\n1");
        }else {
            for (int i = 3; i <=n; i++) {
                sum=a+b;
                a=b;
                b=sum;
            }
            System.out.println("输出样例:"+sum%10007);
        }
    }
}

(二)如果是想支持Fibonacci,可以计算更大的数
将     int  n=sc.nextInt();

改为 BigInteger n=sc.nextBigInteger();

(一)如果只是想解决输入很多的书,会报错的问题,可采用try, catch捕捉异常。

 public static void main(String[] args) {
System.out.println("输入样例:");
Scanner sc=new Scanner(System.in);

    int n;
    try{
        n=sc.nextInt();
    }catch(Exception e){
        System.out.println("您输入的样例过大!!!");
        return;
    }finally{
        sc.close();
    };

    long a=1,b=1,sum=0;
    if (n>=1&&n<=1000000) {
        if (n==1||n==2) {
            System.out.println("输出样例:\n1");
        }else {
            for (int i = 3; i <=n; i++) {
                sum=a+b;
                a=b;
                b=sum;
            }
            System.out.println("输出样例:"+sum%10007);
        }
    }
}

(二)如果是想支持Fibonacci,可以计算更大的数
将 int n=sc.nextInt(); 改为 BigInteger n=sc.nextBigInteger();

输入的数太大,可以考率限制大小。

用数组吧,分段存储。模拟大数运算。之前我用过数组来算长度为1000+的数据进行加减乘除

Do you know the the type of int the range?