作业

ray31405303 2009-08-21 11:27:35
public class Program4 {
static StringBuffer str = new StringBuffer();

public static void main(String[] args) {
System.out.print(test(90));
}

public static String test(int n) {
str = str.append(n+ " = 1");
if(n <= 3) {
System.out.print("请输入一个大于3的正整数!");
System.exit(1);
}

for(int i = 2; i <= n; i++) {
if(n%i == 0) {
str = str.append("*" +i);
n = n/i;
return test1(n);
}
}
return " errer";
}
public static String test1(int n) {
for(int i = 2; i <= n; i++) {
if(n%i == 0) {
str = str.append("*" +i);
n = n/i;
if(n == 1) {
return str.toString();
}
return test1(n);
}
}
return "err";
}

}

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
如上,刚做的一个练习,求有没有方便点简洁点的办法。
...全文
193 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hellowgy 2009-08-23
  • 打赏
  • 举报
回复
不错的想法!
bigbug9002 2009-08-22
  • 打赏
  • 举报
回复
public class Program4 {
static StringBuffer str = new StringBuffer();

public static void main(String[] args) {
System.out.print(test2(200));
}

public static String test(int n) {
str = str.append(n+ " = 1");
if(n <= 3) {
System.out.print("请输入一个大于3的正整数!");
System.exit(1);
}

for(int i = 2; i <= n; i++) {
if(n%i == 0) {
str = str.append("*" +i);
n = n/i;
return test1(n);
}
}
return " errer";
}
public static String test1(int n) {
for(int i = 2; i <= n; i++) {
if(n%i == 0) {
str = str.append("*" +i);
n = n/i;
if(n == 1) {
return str.toString();
}
return test1(n);
}
}
return "err";
}

//下面的test2不用递归:
//
public static String test2(int n){
if(n<=3){
System.out.print("请输入一个大于3的正整数!");
System.exit(1);
}
str.append(n+" = 1");
int x=n;
int i=2;
while(x!=1){
if(x%i==0){
str.append("*"+i);
x/=i;
}else{
i++;
}
}
return str.toString();
}

}
ray31405303 2009-08-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bigbug9002 的回复:]
Java codepublicclass Program4 {static StringBuffer str=new StringBuffer();publicstaticvoid main(String[] args) {
System.out.print(test2(200));
}publicstatic String test(int n) {
st¡­
[/Quote]
谢谢了 ,不用递归的方法学习了
ray31405303 2009-08-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iamyumingxing 的回复:]
就是在你的基础上多加一个布尔变量first,然后把你的方法test1()去掉,不知道可不可以?
[/Quote]
学习了,原来可以加个布尔变量,我就说我写的怎么这么麻烦,谢谢了
gutan_fox 2009-08-22
  • 打赏
  • 举报
回复
就是在你的基础上多加一个布尔变量first,然后把你的方法test1()去掉,不知道可不可以?
gutan_fox 2009-08-22
  • 打赏
  • 举报
回复
public class Program4 {
static StringBuffer str = new StringBuffer();

private static boolean first = true;

public static void main(String[] args) {
System.out.print(test(90));
}

public static String test(int n) {

if (first) {
str = str.append(n + " = 1 ");

if (n <= 3) {

System.out.print("请输入一个大于3的正整数!");
System.exit(1);
}
}

first = false;

if (n == 1)
return str.toString();

for (int i = 2; i <= n; i++) {
if (n % i == 0) {
str = str.append("* " + i);
n = n / i;
return test(n);
}
}

return " errer";
}

}

不知道这样算不算你说的简洁?呵呵……
老紫竹 2009-08-22
  • 打赏
  • 举报
回复
能实现就好,你的算法基本正确
j1223jesus 2009-08-22
  • 打赏
  • 举报
回复

package untitled3;

/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2009</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Untitled3 {
static StringBuffer str = new StringBuffer();

public static void main(String[] args) {
System.out.print(test(90));

}

public static StringBuffer test(int n) {
str = str.append(n + " = 1*");
if (n <= 3) {
System.out.print("请输入一个大于3的正整数!");
System.exit(1);
}

for (int i = 2; i <= n; i++) {
while (n != i) {
if (n % i == 0) {
str = str.append(i + "*");
n = n / i;
}
else {
break;
}
}
}
str = str.append(n);

return str;
}

}


改了一点
lcj_up 2009-08-22
  • 打赏
  • 举报
回复
我觉得这样可以了,算法正确
  • 打赏
  • 举报
回复
不错顶顶

62,620

社区成员

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

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