正确使用long原始数据类型及其数组

时间:2016-08-13 19:00:12

标签: java arrays long-integer type-conversion fibonacci

我一直在编写一个问题,要求我code a modified version of fibonacci.。现在虽然,代码已经准备就绪,但它无法正常工作,因为返回的是int而不是long

以下内容用作输入时:0 1 10 输出为-9223372036854775807 而不是84266613096281243382112

以下是代码:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {
    static long arr[];

    public static long func(int n,long t1, long t2){
    arr = new long[n+1];
    arr[1]=t1;
    arr[2]=t2;
    return func(arr,n);    

    }
    public static long func(long[] arr, int n){
        if(n==0||n==1||n==2){
            return arr[n];
        }
        if(arr[n]!=0){
            return arr[n];
        }
        arr[n]=(long)(Math.pow(func(arr,n-1),2)+func(arr,n-2));
        return arr[n];
    }

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        long t1= s.nextLong();
        long t2=s.nextLong();
        int n=s.nextInt();
        System.out.print(func(n,t1,t2));
    }
}


我不是在寻求逻辑帮助或解决问题。我想知道我哪里出错了,即使我使用long数组,返回的答案仍然是int

此外,对如何处理长阵列的任何帮助都会很棒。

3 个答案:

答案 0 :(得分:0)

返回的答案为2147483647,因为整数的最大值为integer,如果值大于[-2147483647, 2147483647],则返回SELECT ct.Quote_Date, ht.Quote_Date AS htDate, ct.Quote_Price, ht.Quote_Price AS [htPrice], ((ct.Quote_Price - ht.Quote_Price)/ht.Quote_Price)*100 AS ChangePerc FROM #TempStock ct OUTER APPLY ( SELECT TOP 1 * FROM #TempStock WHERE CONVERT(DATE,CAST(ct.Quote_Date AS VARCHAR),101) >= DATEADD(MM,1, CONVERT(DATE,CAST(Quote_Date AS VARCHAR),101)) ORDER BY Quote_Date DESC ) ht ORDER BY ct.Quote_Date DESC 之间的值。我认为逻辑上存在一些问题。

答案 1 :(得分:0)

对于所有想知道的人,我昨天意识到长期的范围已经耗尽,因此无法用来解决问题。我使用过BigInteger类,它可以工作。

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {


    public static BigInteger func(int n,BigInteger t1, BigInteger t2){
    BigInteger arr[] = new BigInteger[n+1];
    arr[1]=t1;
    arr[2]=t2;
    return func(arr,n);    

    }
    public static BigInteger func(BigInteger[] arr, int n){
        if(n==0||n==1||n==2){
            return arr[n];
        }
        if(arr[n]!=null){
            return arr[n];
        }
        arr[n]=(func(arr,n-1).pow(2)).add(func(arr,n-2));
        return arr[n];
    }

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        BigInteger t1= s.nextBigInteger();       
        BigInteger t2= s.nextBigInteger();       
        int n=s.nextInt();
        System.out.print(func(n,t1,t2));
    }
}

答案 2 :(得分:0)

您可以使用此代码,因为他们并不要求整个数组,而只需要第n个术语。

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {
    public static void main(String args[] ) throws Exception {
        Scanner in=new Scanner(System.in);
        BigInteger t1=in.nextBigInteger();
        BigInteger t2=in.nextBigInteger();
        int n=in.nextInt();
        for(int i=0;i<n-2;i++)
        {
            BigInteger temp;
            temp = (t2.pow(2)).add(t1);
            t1=t2;
            t2=temp;
        } 
        System.out.println(t2);
    }
}