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?