编写java循环程序,找出1000以内的所有完数
展开全部
public class Test {
public static void main(String[] args) {
int i,j,sum; //sum用来存放因子之和
for(i=1;i<1000;i++) //对1到1000以内的数依次尝试
{
sum = 0; //给sum赋值,同时也是对上一次的值清空
for(j=1;j<=i/2;j++) //查找因子
{
if(i%j==0) // 如果是因子
{
sum+=j; //把当前的因子累加到sum中
}
}
if(sum==i) //判断是不是完数,即因子之和等于自身
{
System.out.print(i+" its factors are: "); //是完数,输出
for(j=1;j<=i/2;j++) //再次找出这个完数的因子
{
if(i%j==0) //输出各个因子
System.out.print(j+", ");
}
System.out.println();
}
}
}
}
这些题百度里面都是找得到的
展开全部
public class PerfectNumberTest {
public static void main(String[] args) {
int count = 0;//定义一个计数器
System.out.println("1~10000范围内的所有完数如下:");
long start = System.currentTimeMillis();
for (int num = 2; num <= 10000 ; num ++ ) {
int sum = 0;//定义一个因子求和公式
for (int divisor = 1 ; divisor <= num / divisor ; divisor ++) {
if (num % divisor == 0 && divisor != num / divisor) {//若num开根号结果不是他的因子
sum = divisor + (num / divisor) + sum;//则num/divisor也一定是他的因子
} else if (num % divisor == 0 && divisor == num / divisor) {//若num开根号的结果是他的因子
sum = divisor + sum;//则只把因子(num/divisor重复因子)赋值给sum
}
}
if ((sum - num) == num) {//如果因子之和-该数等于该数,则这个数就是完数
count ++;//计数器加一
System.out.println("第 " + count +" 完数是: " + num);//输出完数
}
}
long end = System.currentTimeMillis();
System.out.println("遍历全部完数所使用的时间: " + (end - start) + " 毫秒");
}
}
参考简书的一篇文章 http://www.jianshu.com/p/5a0d45da2b99
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,我不知道完数是什么 不过百度了下发现有一个人用c++编好了 省的我动脑筋了就,下面我把那朋友写的换成了java的运行了下发现还是可以的你直接用就好了:
int i,j,k,h,s,sum;
int[] a = new int[200];
s=0;
sum=0;
for(i=2;i<=1000;i++)
{
s=0;//此处s=0一定要加,因为前几次循环的时候s的值已经改变
k=0;
for(j=1;j<i;j++)
{
if((i%j)==0){a[k]=j;k++;}
}
for(h=0;h<k;h++)
{
s+=a[h];
}
if(i==s){System.out.println(i);sum++;}
}
System.out.println(sum);
结果就这样了,变量定义的有点乱,你看看就行了我也懒得改这个,输出的结果是完数以及完数的个数,放到main里直接运行
int i,j,k,h,s,sum;
int[] a = new int[200];
s=0;
sum=0;
for(i=2;i<=1000;i++)
{
s=0;//此处s=0一定要加,因为前几次循环的时候s的值已经改变
k=0;
for(j=1;j<i;j++)
{
if((i%j)==0){a[k]=j;k++;}
}
for(h=0;h<k;h++)
{
s+=a[h];
}
if(i==s){System.out.println(i);sum++;}
}
System.out.println(sum);
结果就这样了,变量定义的有点乱,你看看就行了我也懒得改这个,输出的结果是完数以及完数的个数,放到main里直接运行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-01-12
展开全部
public static void main(String[] args)
{
int s;
for(int i=1;i<=1000;i++)
{
s=0;
for(int j=1;j<i;j++)
if(i % j==0)
s=s+j;
if(s==i)
System.out.print(i+" ");
}
System.out.println();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
package mytest;
public class Example {
public static void main(String[] args) {
System.out.println("1到1000的完数有:");
for (int i=1; i < 1000; i++){
int t = 0;
for (int j=1; j <= i/2; j++){
if(i % j == 0){
t = t + j;
}
}
if(t == i){
System.out.print(i+" ");
}
}
}
}
public class Example {
public static void main(String[] args) {
System.out.println("1到1000的完数有:");
for (int i=1; i < 1000; i++){
int t = 0;
for (int j=1; j <= i/2; j++){
if(i % j == 0){
t = t + j;
}
}
if(t == i){
System.out.print(i+" ");
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询