注册 登录
编程论坛 新人交流区

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

tuesday2 发布于 2007-10-01 19:22, 3029 次点击
import javax.swing.*;
public class Zhi
{
public static void main(String args[])
{
String input=JOptionPane.showInputDialog("请输入正整数:");
int num=Integer.parseInt(input);//输入的字符串转化为整数

if(num==1) //输入为1,直接输出
{
System.out.print("num=1");
}
else
{
System.out.print("num=");
for(int i=2;i<num;i++)
{
if(num%i==0)
{
System.out.print(i);
num=num/i;
if(num!=1)
{
System.out.print("*");
}
i--; //防止它只除一次质因数
}
if(num==1) //整除完后,值为1跳出
{
break;
}
}
}
System.exit(0); //输入的图形框结束语句
}
}


运行的结果:比如输入90,num=2*2*5* 希望朋友们给指点哈,哪一步出了问题?
10 回复
#2
tuesday22007-10-01 19:37
运行结果是:输入90,num=2*3*3*,   输入100,num=2*2*5*,   总是最后一个数输不出来,请指点。
#3
xhtang2007-10-02 14:44
你的程序有问题
for(int i=2;i<num;i++)
num=num/i;
当i=5时;
num=5;
怎么还有输出来呢;

你可以改成
for(int i=2;i<num+1;i++)

用while来判断也可以
while(num%i==0)
{
System.out.print(i);
num=num/i;
if(num!=1)
{
System.out.print("*");
}

}
#4
一陀屎2007-10-02 14:57
#5
lm1682007-10-02 15:57
看不懂
无法帮助了
#6
finalken2007-10-02 16:45
import javax.swing.*;
public class Zhi
{
public static void main(String args[])
{
String input=JOptionPane.showInputDialog("请输入正整数:");
int num=Integer.parseInt(input);//输入的字符串转化为整数

if(num==1) //输入为1,直接输出
{
System.out.print("num=1");
}
else
{
System.out.print("num=");
for(int i=2;i<num;i++) //3楼的改法是对的,不过建议你在跳出循环以后再单独输出num会好点这样可以避免多一个'*'
{
if(num%i==0)
{
System.out.print(i);
num=num/i;
if(num!=1)
{
System.out.print("*");
}
i--; //防止它只除一次质因数
}
if(num==1) //整除完后,值为1跳出 //这里完全没必要加跳出,for的跳出条件已经很好了
{
break;
}
}
}
System.exit(0); //输入的图形框结束语句
}
}

[此贴子已经被作者于2007-10-2 16:46:13编辑过]

#7
南海十三郎2007-10-03 11:03
不错啊,哈哈
#8
coding2007-10-03 15:31
回复:(tuesday2)题目:将一个正整数分解质因数。例...
我给出一个C语言版本的算法!

#include <stdio.h>
#include <math.h>
void main()
{
int ndata;
int nnum;
int nend;
int nterm;
int ncount=0;
int narray[30];
scanf("input your number:",&ndata);
nend=(int)sqrt((float)ndata);
nterm=2;
do
{
if (ndata%nterm==0)
{
ndata=ndata/nterm;
nend=(int)sqrt((float)ndata);
narray[ncount]=nterm;
ncount++;
}
nterm++;
}while(nterm<=nend);

narray[ncount]=ndata;
for(nterm=0;nterm<=ncount;nterm++)
printf("%d ",narray[nterm]
}



#9
tuesday22007-10-04 00:08

首先,感谢三楼,多谢你的帮助。

import javax.swing.*;
public class Zhi
{
public static void main(String args[])
{
String input=JOptionPane.showInputDialog("请输入正整数:");
int num=Integer.parseInt(input);//输入的字符串转化为整数

if(num==1) //输入为1,直接输出
{
System.out.print("num=1");
}
else
{
System.out.print("num=");
for(int i=2;i<num+1;i++)
{
if(num%i==0)
{
System.out.print(i);
num=num/i;
if(num!=1)
{
System.out.print("*");
}
i--; //防止它只除一次质因数
}
if(num==1) //整除完后,值为1跳出
{
break;
}
}
}
System.exit(0); //输入的图形框结束语句
}
}

#10
tuesday22007-10-04 00:14

这一个代码更加简洁一点。(此三楼的智慧,多谢)

import javax.swing.JOptionPane;
public class Zhi2
{
public static void main(String args[])
{
String input=JOptionPane.showInputDialog("请输入正整数:");
int num=Integer.parseInt(input);//输入的字符串转化为整数

if(num==1) //输入为1,直接输出
{
System.out.print("num=1");
}
else
{
System.out.print("num=");
for(int i=2;i<num+1;i++)
{
while(num%i==0)
{
System.out.print(i);
num=num/i;
if(num!=1)
{
System.out.print("*");
}
}
}
}
System.exit(0); //输入的图形框结束语句
}
}

#11
cqyy7252010-12-08 22:25

public class t111 {
    /**
     *
     * 将一个正整数分解质因数。
     */
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);

        System.out.println("请输入一个整数按回车确认");

        int num = input.nextInt();

        System.out.print(num + "=");
        if (num == 1) {
            System.out.println(1);
        }
           
        for (int i = 2; i < num + 1; i++) {
            if (num % i == 0) {
                System.out.print(i);
                num = num / i;
                i--;
                if (num != 1) {
                    System.out.print("*");
                }
            }
        }
    }

}
1