06普通推导
【题目】
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
【分析】
手动推算可以发现1不会落入循环圈,2会落入循环。
那么就以2为开始点,想办法找出循环圈中的所有数字。
计算法则是:把正整数的每一位平方后再求和,得到的新整数继续这样操作。
那么只要发现一旦出现第一个开始重复的数字,说明之前从这个数字开始到这个数字结束的所有数字就是平方怪圈的所有数字,有了这些数字,就可以求出它们的最大值。
import java.util.*; public class Lanq { //1534 public static void main(String[] args) { solve(); } public static void solve() { Scanner sc=new Scanner(System.in); // int n=sc.nextInt(); int cnt=1; List aa=new ArrayList(); int n=2; aa.add(n); int ans=0; while(n>0&&cnt<=100){ cnt++; if(n<10){ n=(n*n); aa.add(n); ans= Math.max(ans, n); } else if(n>=10&&n<=99) { int a1=n/10; int a2=n%10; n=a1*a1+a2*a2; aa.add(n); ans= Math.max(ans, n); } else if(n>=100&&n<=999) { int a1=n%10; int a2=n/10%10; int a3=n/100; n=a1*a1+a2*a2+a3*a3; aa.add(n); ans= Math.max(ans, n); } } System.out.println(ans); } }