import java.math.BigInteger; public class MyTest { public static BigInteger ShowNumber( int n ){ BigInteger result = null; if( n == 1) { result = BigInteger.valueOf(1); }else if( n == 2 ) { result = BigInteger.valueOf(2); }else if( n == 3 ) { result = BigInteger.valueOf(4); }else{ result = ShowNumber( n-1 ).multiply( ShowNumber( n-2 ) ); }
return result; } public static void main(String[] args){ System.out.println(ShowNumber(20)); }
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Array2Number {
public static void main(String[] args){
BigDecimal i=new BigDecimal(1);
BigDecimal j=new BigDecimal(2);
BigDecimal k=new BigDecimal(4);List<BigDecimal> arr=new ArrayList();
arr.add(0,i);
arr.add(1,j);
arr.add(2,k);for(int a=1;a<33;a++){
long s = (new Date()).getTime();
Integer b=a+1;
BigDecimal x = arr.get(a);
BigDecimal y = arr.get(b);
BigDecimal z= x.multiply(y);
long e = (new Date()).getTime();
System.out.println(a+" ("+(e-s)+") "+ z);
arr.add(a+2,z);
}
}
}
public static void main(String[] args) {
BigInteger bn = new BigInteger("2");
for(int tar=1;tar<32;tar++){
System.out.println((bn.pow(getNum(tar-1))));
}
}
static int getNum(int n){
if(n==0 || n==1 || n==2){
return n;
}else{
return (n-2)+(n-1);
}
}
结果和你的不一样.但前5项相同..
第一项没用么?为什么直接从第2项开始.第2位数*第3位数=第4位数
public BigDecimal test(int num){
BigDecimal bigDecimalTemp = new BigDecimal(0);
BigDecimal bigDecimalTemp2 = new BigDecimal(0);
BigDecimal result = new BigDecimal(0);
for(int i = 1 ; i < num ; i++){
if(i == 1){
bigDecimalTemp = BigDecimal.valueOf(i);
bigDecimalTemp2 = BigDecimal.valueOf(2);
System.out.println(i+"\t"+1);
}
result = bigDecimalTemp.multiply(bigDecimalTemp2);
System.out.println((i+1) +"\t"+ bigDecimalTemp +" * " + bigDecimalTemp2 +" = "+ result);
bigDecimalTemp = bigDecimalTemp2;
bigDecimalTemp2 = result;
}
return result;
static int getNum(int n){
if(n==0 || n==1 || n==2){
return n;
}else{
return (n-2)+(n-1);
}
}
改成
static int getNum(int n){
if(n==0 || n==1 || n==2){
return n;
}else{
return getNum(n-2) + getNum(n-1);
}
}
import java.math.BigInteger;
public class MyTest { public static BigInteger ShowNumber( int n ){
BigInteger result = null;
if( n == 1) {
result = BigInteger.valueOf(1);
}else if( n == 2 ) {
result = BigInteger.valueOf(2);
}else if( n == 3 ) {
result = BigInteger.valueOf(4);
}else{
result = ShowNumber( n-1 ).multiply( ShowNumber( n-2 ) );
}
return result;
} public static void main(String[] args){
System.out.println(ShowNumber(20));
}
第2个数是8.0
第3个数是32.0
第4个数是256.0
第5个数是8192.0
第6个数是2097152.0
第7个数是1.7179869184E10
第8个数是3.6028797018963968E16
第9个数是6.1897001964269014E26
第10个数是2.2300745198530623E43
第11个数是1.3803492693581128E70
第12个数是3.0782817340933187E113
第13个数是4.249103942534137E183
第14个数是1.307993905256674E297
第15个数是Infinity
第16个数是Infinity
第17个数是Infinity
第18个数是Infinity
第19个数是Infinity
第20个数是Infinity
第21个数是Infinity
第22个数是Infinity
第23个数是Infinity
第24个数是Infinity
第25个数是Infinity
第26个数是Infinity
第27个数是Infinity
第28个数是Infinity
第29个数是Infinity
第30个数是Infinity
第31个数是Infinity
成功生成(总时间:2 秒)
先取个以2为底的对数
上面的数列就变成斐波那契数列
取斐波那契数列的第31项,N=Fibonacci(31)
最后结果就是2的N次方。当然这个数字用10进制表示起来很麻烦
但是题目也没规定一定要用10进制啊
用2进制表示就是,1后面(N-1)个0
除了第一项以外,都是跟斐波那契数列一样的
N=Fibonacci(32),不是31,上面不小心打错了