一些简单的java编程题(1) ————求10000以内的完数
2018-01-29 11:31
204 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。
程序运行结果如下:
编程结束发现,如果去判断是否是所有真因子的相加,程序的编程思想复杂,可以进一步调整结构,改善程序。
改善程序如下:
程序运行结果如下:
疑问:
当设 n= 100,000,000时,或者n的数值更大时,程序无法运行出 8128之后的完数。 希望能有人解答下疑问。
/* (程序头部注释开始) 版权声明:保留个人权利。 如程序有不当之处,敬请指正。 * 文件名称: 《一些简单的java编程题(1) ————求10000以内的完数》 * 作 者: 那就去巴黎 * 完成日期: 2018 年 01 月 29 日 * 版 本 号: JDK 9.0.1 问题描述: 若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数,简称“完数” 。 例如: 6=1+2+3。 28=1+2+4+7+14 。 编写一个Java程序,找出 10000 以内的所有完数。 题目分析: 可以使用for循环,和求余数符号% 先求自然数的出所有的真因子,然后相加,如果等于此自然数本身则为完数。 * (程序头部的注释结束) */ package questions; public class Q1 { public static void main(String[] args) { int n=10000; perfectNumber(n); } private static void perfectNumber(int n) // 编写一个perfectNumber 的方法来找出完数 { System.out.println(n+"以内的完数为:"); for(int i=1;i<n+1;i++) // 循环 10000 及以内的数, 此处 i<n+1 也可以写成 i<=n { int sum=0; for(int j=1;j<i/2+1;j++) { if(i%j==0) // 找出所有真因子 { sum+=j; // 使所有找出的真因子一个个相加。 if(j==i/2 && sum==i) /* 此处的 j==i/2 是因为: 如 24=1+2+3+4+6+8 并不是所有真因子之和,缺了真因子12。 所以此处强制先行判断是否求出所有真因子。*/ { System.out.print(i+" "); } } } } } }
程序运行结果如下:
编程结束发现,如果去判断是否是所有真因子的相加,程序的编程思想复杂,可以进一步调整结构,改善程序。
改善程序如下:
package questions; public class Q1_Test { public static void main(String[] args) { int n=10000; perfectNumber(n); } private static void perfectNumber(int n) { System.out.println(n+"以内的完数有:"); //println 和 print 的区别是前者输出时换行 for(int i=1; i<=n; i++) // 此处就使用了 i<=n { int sum = 0; for(int j=1; j<i; j++) // 此for循环内,所有真因子直接相加。 { if(i%j ==0) { sum = sum + j; // sum+=j 是 sum=sum+j的简化写法。 } } if(sum == i) //当此处的判断 if 跳出第二个for循环时,不用判断是否所有真因子相加。 { System.out.print(i+" "); // " " 内的空格是为了让显示的结果更清楚 } } } }
程序运行结果如下:
疑问:
当设 n= 100,000,000时,或者n的数值更大时,程序无法运行出 8128之后的完数。 希望能有人解答下疑问。
相关文章推荐
- 一些简单的java编程题(5) ————鸡兔同笼问题
- 一些简单的java编程题(3) ————小球落地问题
- java编程题:打印10000以内的回文数字
- 一些简单的java编程题(2) ————古典问题(兔子问题)
- 一些简单的java编程题(4) ————正整数分解质因数
- 一些简单的java编程题(12) ————9*9乘法口诀
- 一些简单的java编程题(13) ————打印菱形
- 一些简单的java编程题(9) ————求最大公约数和最小公倍数
- 一些简单的java编程题(6) ————水仙花数
- 一些简单的java编程题(10) ————判断完全平方数
- 一些简单的java编程题(7) ————判断素数
- 一些简单的java编程题(8) ————判断成绩等第
- 一些简单的Java程序
- 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。(java)
- Java菜鸟教程 一些简单的练习
- 寻找1000以内的完数 JAVA
- 工作之余,整理了一下平时处理数据的一些常用的,简单的方法。希望对学习JAVA的朋友有点帮助
- 初学java:输出1000以内的所有完数
- java的一些简单注释要求
- 学习JAVA中(一) 一些简单的排序算法