方法一:
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
for (int i = 10000000 ; i >= 0 ;i--)//题目要求找到最后一个数字,那就直接从最后找。
{
int temp = i ;
if (isfeibonaxi(temp))
{
System.out.println(temp);
break;
}
}
}
private static boolean isfeibonaxi(int temp) {
int weishu = 7;//直接大胆猜测位数为7
ArrayList<Integer> list = new ArrayList<>();
int originalTemp = temp; // 保存原始值
while (temp!=0)
{
int a = temp%10;
list.add(a);
temp/=10;
}
Collections.reverse(list);//将集合反转
for (int i = 0; i < list.size();i++)
{
int sum = 0;//sum要及时置零
for (int j = i ; j < i+weishu; j++)//实际上这个for循环是在进行累加,直到找到与原始值相同的一个数。
{
sum += list.get(j);
}
list.add(sum);
if (sum > originalTemp)
break;
}
return list.contains(originalTemp);//检查 list 是否包含原始值 originalTemp
}
}
方法二:
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> objects = new ArrayList<>();
for (int i = 197; i <= 10000000; i++) {
int shuzi=i;
if (isfeibonaxi(shuzi)) objects.add(i);
}
for (int i = 0; i < objects.size(); i++) {
System.out.println(objects.get(i));
}
}
static boolean isfeibonaxi(int n){
int weishu=0;
int shuzi=n;
ArrayList<Integer> list = new ArrayList<>();
while (n!=0){
int a=n%10;
list.add(a);
weishu++;
n=n/10;
}
Collections.reverse(list);
for (int i = 0; ; i++) {
int sum=0;
for (int j = i; j < i+weishu; j++) {
sum+=list.get(j);
}
list.add(sum);
if (sum>shuzi)break;
}
return list.contains(shuzi);
}
}