这段程序该怎么改

独孤帆 2009-11-03 08:05:02

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
   找出1000以内的所有完数。
这是题目的C程序
#include "stdio.h"
#include "conio.h"
main()
{
static int k[10];
int i,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;
s=j;
for(i=1;i<j;i++)
{
if((j%i)==0)
{
n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{
printf("%d is a wanshu",j);
for(i=0;i<n;i++)
printf("%d,",k[i]);
printf("%d\n",k[n]);
}
}
getch();
}


这是我改写的JAVA


public class Test19
{
public static void main(String[] args)
{
int k[]=new int[10];
for (int j=2;j<1000 ;j++ )
{
int n=-1;
int s=j;
for (int i=1;i<j ;i++ )
{
if ((j%i)==0)
{
n++;
s=s-i;
k[n]=i;
}
if (s==0)
{
System.out.println(j+"是完数");
for(i=0;i<n;i++)//加了这个就在死循环
{ System.out.print(k[i]);
System.out.println(k[n]);}
}
}
}
}
}

执行了就死循环呢
...全文
99 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wifewifewife 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cgzchf 的回复:]
引用 6 楼 littlemonster 的回复:
数组越界了。

int k[]=new int[10];
这个不够放。。

C的那个为何这样设?C的不会越界?
[/Quote]
这个是你自己设定的,你自己设定的数组不够大。
独孤帆 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 littlemonster 的回复:]
数组越界了。

int k[]=new int[10];
这个不够放。。
[/Quote]
C的那个为何这样设?C的不会越界?
littlemonster 2009-11-03
  • 打赏
  • 举报
回复
数组越界了。

int k[]=new int[10];
这个不够放。。
closewbq 2009-11-03
  • 打赏
  • 举报
回复

public static void main(String[] args) {
int i, j, n, s;
List<Integer> k = null;
for (j = 2; j < 1000; j++) {
n = -1;
s = j;
k=new ArrayList<Integer>();
for (i = 1; i < j; i++) {
if ((j % i) == 0) {
n++;
s = s - i;
k.add(i);

}
}
if (s == 0) {
System.out.println(j + "是完数");
for (i = 0; i < n; i++)//加了这个就在死循环
{
System.out.println(k.get(i));
}
System.out.println(k.get(n));

}
}
}
独孤帆 2009-11-03
  • 打赏
  • 举报
回复
数组怎样才能不越界?设一个很大的数组?
lemon520 2009-11-03
  • 打赏
  • 举报
回复
数组越界了,注意最后一句System.out.println(k[n]);和他上面那句不在同一个for循环里面,要看得更清楚的话改成下面这样就可以了
if(s==0)
{
System.out.println(j+"是完数");
for(i=0;i<n;i++){
System.out.print(k[i]);
}
System.out.println(k[n]);
}
独孤帆 2009-11-03
  • 打赏
  • 举报
回复
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at com.demo.Test19.main(Test19.java:19)
是什么错误?
lemon520 2009-11-03
  • 打赏
  • 举报
回复
括号打错地方了
if ((j%i)==0)
{
n++;
s=s-i;
k[n]=i;
}
}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧