欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java 位平方和

程序员文章站 2022-04-08 19:53:35
把一个整数的每个数位都平方后求和,又得到一个整数,则称这个整数为:位平方和。 题目: 平方怪圈 如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。对新产生的正整数再做同样的处理。 如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入1,就是落入同一个循环圈。 请写出这个循环圈中最大 ......

把一个整数的每个数位都平方后求和,又得到一个整数,则称这个整数为:位平方和。

题目:

平方怪圈

如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。

如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。

请写出这个循环圈中最大的那个数字。

请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。(第七届蓝桥杯)

 1 import java.util.arraylist;
 2 import java.util.scanner;
 3 
 4 public class three {
 5     static int max=0;//最大值
 6     static arraylist arrlist=new arraylist();//存下每一次的平方和
 7     static arraylist quan=new arraylist();//循环圈
 8 
 9     public static void f(int n){
10         int sum=0;
11         while(n!=0){
12             sum+=(n%10)*(n%10);
13             n=n/10;
14         }
15         if(sum!=0) {
16             if (!arrlist.contains(sum)) {//如果没有出现平方和
17                 arrlist.add(sum);
18                 f(sum);
19             } else {
20                 //当出现重复的平方和时,代表进入循环圈,继续求平方和,将该循环圈中最大的数字找出
21                 //循环一次得出循环圈中的所有数字
22                 do {
23                     quan.add(sum);
24                     n = sum;
25                     sum = 0;
26                     while (n != 0) {
27                         sum += (n % 10) * (n % 10);
28                         n /= 10;
29                     }
30                 } while (!quan.contains(sum));
31                 //遍历循环圈得出最大的数字
32                 for (int i = 0; i < quan.size(); i++) {
33                     if (max < (int) quan.get(i)) {
34                         max = (int) quan.get(i);
35                     }
36                 }
37             }
38         }
39     }
40     public static void main(string[] args) {
41         scanner sc = new scanner(system.in);
42         int n = sc.nextint();
43         f(n);
44         system.err.println(max);
45         sc.close();
46     }
47 
48 }

代码转自:https://blog.csdn.net/djdjdjcux/article/details/82954404