黑马程序员技术交流社区
标题:
完数方面的题,谁有更好的方法区解释
[打印本页]
作者:
廉伟
时间:
2012-10-2 13:47
标题:
完数方面的题,谁有更好的方法区解释
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。
解答:
根据题目意思,设计程序如下:
import java.io.*;
import java.util.*;
public class Text9 {
public static void fenJie(Vector<Integer> m,int n)
{
for(int i=1;i<=n/2;i++)
if(n%i==0)
m.addElement(i);
}
public static boolean panBie(Vector<Integer> m,int n)
{
int sum=0;
for(int i=0;i<m.size();i++)
sum=sum+m.elementAt(i);
if(sum==n)
return true;
else
return false;
}
public static void main(String[] args) throws IOException
{
boolean zhenjia=false;
System.out.println("1000以内的完数为:");
for(int i=2;i<1000;i++)
{
Vector<Integer> pool=new Vector<Integer>();
fenJie(pool,i);
zhenjia=panBie(pool,i);
if(zhenjia)
System.out.println(i);
}
}
}
作者:
徐-星星
时间:
2012-10-3 10:31
我下面的解法比你那个简单很多:
public class WanShu{
public static void main(String args[]){
int n=6,z=0,k,sum=0,i=0,j=0;
Integer zi[]=new Integer[100];
for(n=1;n<=1000;n++){
k=1;
sum=0;
while(k<n)
{
z=k++;
if ((n%z)==0){
sum+=z;
zi[i++]=z;
j=i;
}
}
if (sum==n) {
System.out.print(n+" its factors are :");
for(i=0;i<j;i++)
System.out.print(zi[i]+",");
System.out.println() ;
}
i=0 ;
}
}
}
希望对你有所帮助,学习愉快!谢谢!
作者:
佘天宇
时间:
2012-10-3 15:04
package cn.itcast.heima.technology;
public class PerfectNumber {
/*
循环嵌套思想
1,遍历所有的数
2,找到遍历到的数的因子
3,求和判断
*/ public static void main(String[] args) {
//判断1~1000之间的完数,循环遍历1到1000之间的数
StringBuilder sb=new StringBuilder();
for(int a=2;a<=1000;a++){
int[]arr=new int[a>>>1];//完数因子不会超过本身的一半
int pos=0;
for(int b=1;b<a;b++)
{
if(a%b==0){
arr[pos++]=b;//将遍历到的数的因子添加进数组
}
}
int temp=0;
for(int x:arr){//求数组的和
temp+=x;
}
if(temp==a)//判断因子的和是否与遍历的数相等,
sb.append(+a+",");
}
System.out.println(sb.toString());
}
}
复制代码
作者:
柏占肖
时间:
2012-10-3 19:32
本帖最后由 柏占肖 于 2012-10-3 19:35 编辑
public class WanShu {
public static void main(String[] args) {
getWanShu(1, 1000);
}
public static void getWanShu(int star, int end) {
int sum = 1;
while (star <= end) {
for (int i = 2; i < Math.sqrt(star); i++) {
if (0 == star % i) {
sum += i+ star / i;
}
}
if ((int) Math.sqrt(star) == Math.sqrt(star)) {
sum += Math.sqrt(star);
}
if (sum == star) {
System.out.println(star);
}
sum = 1;
star++;
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2