将一个正整数分解质因数,求JAVA代码(要求不能用while语句)
时间:2008-08-19 18:08:38
来源:论坛整理 作者: 编辑:chinaitzhe
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5,输入80,打印出80=2*2*2*2*5.(要求不能用while语句)
网友回复:不能用while语句
=============\
那for行不行!?
网友回复:不能循环,就用递归
网友回复:可以,只限制用while,其他不限!
网友回复:在线等待牛人的代码……
网友回复:可以,只限制用while,其他不限!
============
晕
网友回复:。。。。。。。
搞笑啊
while(true)
和
for(;true;)
又有什么区别呢
网友回复:public static String test(int n){
StringBuffer str = new StringBuffer();
str.append(n "= ");
if(n <=3){
str.append(n);
return str.toString();
}
for(int i=2; i <=n/2; i ){
if (n%i==0){
str.append(i "* ");
n=n/i;
i=1;
}
}
str.append(n);
return str.toString();
}
网友回复:怎么了?不让用while,这是条件,楼上,有区别和没区别是一回事,不让用是另一回事
有说话的,但为什么没有写代码的?!
网友回复:谢谢 melas()
期待其他更多不同的代码!
网友回复:尝试了一下递归,半天没写出来
网友回复:除了用while我没能用别的写出来,但while已经不怎么提倡了!所以求别的代码!!
网友回复:强烈寻求递归思路!!!!!
强烈寻求递归思路!!!!!
强烈寻求递归思路!!!!!
强烈寻求递归思路!!!!!
强烈寻求递归思路!!!!!
强烈寻求递归思路!!!!!
强烈寻求递归思路!!!!!
强烈寻求递归思路!!!!!
强烈寻求递归思路!!!!!
强烈寻求递归思路!!!!!
网友回复:up
网友回复:不开玩笑了……
我也想知道递归的怎么写~
网友回复:static void zhi(int num)
{
if(num==1)
{
System.out.print( "1 ");
}
else
{
for(int i=2;i <=num;i )
{
if(num%i==0)
{
System.out.print(i "* ");
num = num/i;
break;
}
}
zhi(num);
}
}
网友回复:static void zhi(int num)
{
if(num==1)
{
System.out.print( "1 ");
}
else
{
for(int i=2;i <=num;i )
{
if(num%i==0)
{
System.out.print(i "* ");
num = num/i;
break;
}
}
zhi(num);
}
}
----------------
漂亮!
不过最后的*1有什么办法把它去除不……
网友回复:还是改改题目吧,
改成:求两个数的和,不能用“ ”运算符
网友回复:import java.util.Scanner;
class factor
{
int Fdata;
factor(int dd)
{
Fdata = dd;
ToFactor(Fdata,2);
}
void ToFactor(int Td,int FacNum)
{
if(Td != FacNum)
{
if(Td鷆Num == 0)
{
System.out.print(FacNum "* ");
ToFactor(Td/FacNum,2);
}
else
{
ToFactor(Td,FacNum 1);
}
}
else
{
System.out.print(FacNum);
}
}
}
public class ABC
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
new factor(data);
}
}
网友回复:beexk(我要当牛人!!!!)
你的程序好象会出问题,程序解出的不全是质数!!!
网友回复:poorb() ( )
你的代码nice 的不能在nice了,不过,程序启动时,应该要求输入,要不然开始感觉程序死了!
网友回复:import java.util.Scanner;
class factor
{
int Fdata;
factor(int dd)
{
Fdata = dd;
ToFactor(Fdata,2);
}
void ToFactor(int Td,int FacNum)
{
if(Td != FacNum)
{
if(Td鷆Num == 0)
{
System.out.print(FacNum "* ");
ToFactor(Td/FacNum,2);
}
else
{
ToFactor(Td,FacNum 1);
}
}
else
{
System.out.print(FacNum);
}
}
}
public class ABC
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
new factor(data);
}
}
==============================================================
顶,顶,顶……………………
poorb() 高手!!!
半年后达这个水平就不错了!
网友回复:hxl_521() :怎么我写的那个程序会解出不全是质数呢?能不能举个例子出来呢?学习
网友回复:我for了一个1到2500的...结果全是质数啊
网友回复:看了beesk的解法,很是简洁巧妙,受教了,但文中只写出了主要算法,我把他的其它部分重新补充了一下,用的是最简单的语句,一般新手都能看懂,希望跟大家共同探讨探讨
import javax.swing.*;
public class Math
{
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)//这个if语句解决楼上说的多一个 "* "问题
{
System.out.print( "* ");
}
i--;//防止它只除一次质因数
}
if (num == 1) //整除完后值为1跳出
{
break;
}
}
}
System.exit(0);//输入的图形框结束语句
}
}
程序在Jbuilder下能正常运行,但自己不明白一个问题,除去那个多的 "* "号用 "\b "退一格就行了,为什么实际操作时 "\b "不起作用,但 "\n "却能换行,请高手指点一下原因,关于java中退格的应用
网友回复:LZ怎么不自己也写写``
网友回复:for(int i=2;i <=num;i )
--> for(int i=2;i <=Math.sqrt(num);i )
网友回复:> > 除了用while我没能用别的写出来,但while已经不怎么提倡了!所以求别的代码!!
无聊的理由。
网友回复:用递归这样写,但效率不及循环
public class A {
public static void main(String[] args) {
int n = 1000;
getZS(n);
}
static boolean finish = false;
public static void getZS(int n) {
if (finish)
return;
int L = (int) Math.ceil(Math.sqrt(n));
boolean b = false;
for (int i = 2; i <= L; i )
if ((n % i) == 0) {
System.out.print(i " ");
getZS(n / i);
b = true;
break;
}
if (!b) {
System.out.print(n);
finish = true;
}
}
}
网友回复:以下是循环写法,显然循环比较好
public class A {
public static void main(String[] args) {
int n = 1000;
int m = -1;
do {
m = getZS(n);
if (m != 1) {
n /= m;
System.out.print(m " ");
} else {
System.out.print(n);
break;
}
} while (true);
}
public static int getZS(int n) {
int L = (int) Math.ceil(Math.sqrt(n));
for (int i = 2; i <= L; i )
if ((n % i) == 0)
return i;
return 1;
}
}
网友回复:public class PrimeFactor
{
public static void main(String[] args)
{
for (int i = 1; i <= 100; i ) {
computePrimeFactor(i);
}
}
public static void computePrimeFactor(int number)
{
System.out.print(number " = ");
if (number < 4) {
System.out.println(number);
}
else {
for (int i = 2; i < number; i ) {
if (number % i == 0) {
System.out.print(i "* ");
number = number / i;
i = 1;
}
}
System.out.println(number);
}
}
}
网友回复:有革命同志在埋怨我不写啊!!!不是不想写,只是人菜的不行!包涵!!
网友回复:修正效率
public class PrimeFactor
{
public static void main(String[] args)
{
for (int i = 1; i <= 100; i )
{
computePrimeFactor(i);
}
}
public static void computePrimeFactor(long number)
{
System.out.print(number " = ");
if (number < 4)
{
System.out.println(number);
}
else
{
for (long i = 2; i <= sqrt(number); i )
{
if (number % i == 0)
{
System.out.print(i "* ");
number = number / i;
i = 1;
}
}
System.out.println(number);
}
}
public static long sqrt(long number)
{
return Math.round(Math.sqrt(number));
}
}
网友回复:菜鸟来鸟!
package src;
/**
*
* @author cokey5614
*
*/
public class main4TestFunction {
/**
* main function 4 test
*
* @param args
* String
* @throws ZZSystemException
* ZZSystemException
*/
public static void main(String args[]) {
int testNum = 121;
int count = 0;
int test = 1;
for (int i = 0; i < testNum; i ) {
test = test * 2;
count ;
if (test > = testNum)
break;
}
System.out.print(testNum " = ");
int toResult = testNum;
int result = 0;
for (int i = 0; i < count; i ) {
if (0 == i) {
result = getMaxSi(toResult);
System.out.print(result " * ");
} else if (!isSi(toResult / result)) {
toResult = toResult / result;
result = getMaxSi(toResult);
System.out.print(result " * ");
} else {
System.out.print(toResult / result " ");
break;
}
}
}
public static boolean isSi(int num) {
if (num == 2 || num == 1) return true;
int temp = num / 2 1;
for (int i = 2; i < temp; i ) {
if (num % i == 0)
return false;
}
return true;
}
public static int getMaxSi(int num) {
int temp = num / 2;
for (int i = temp; i > = 1; i--) {
if (num % i == 0 && isSi(i)) {
return i;
}
}
return num;
}
}
网友回复:高手
网友回复:import java.util.Scanner;
public class Factor {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
factor(data,2);
}
static void factor(int num,int div) {
if(num <div*2){
System.out.println(num);
}else{
if(num%div==0){
System.out.print(div "* ");
factor(num/div,div);
}else{
if(div==2) {
factor(num,div 1);
}else{
factor(num,div 2);
}
}
}
}
}
网友回复:poorb() 写得非常好,不过有一处在改一下会更好:
package qujianfeng;
public class FenJieZhiYinShou {
int Fdata;
int count=0;
FenJieZhiYinShou(int dd) {
Fdata = dd;
ToFactor(Fdata, 2);
System.out.println();
System.out.println(count);
}
void ToFactor(int Td, int FacNum) {
if (Td != FacNum) {
if (Td % FacNum == 0) {
System.out.print(FacNum "* ");
ToFactor(Td / FacNum, FacNum);//如果是2的话会导致后面的else部分被多次没用的执行
} else {
count ;
ToFactor(Td, FacNum 1);
}
} else {
System.out.print(FacNum);
}
}
public static void main(String[] args) {
int data=Integer.valueOf(javax.swing.JOptionPane.showInputDialog( "请输入要分解的数: ")).intValue();
new FenJieZhiYinShou(data);
System.exit(0);
}
}
网友回复:import java.util.*;
public class Test
{
public static void main(String[]args){
Test.doJob(80);
}
public static void doJob(int number){
System.out.println(number "= ");
List list = new ArrayList();
calc(number, list);
System.out.println(list);
}
public static void calc(int number, List list){
if(number==1)return;
int i=2;
while(true){
if(number%i==0){
list.add(i);
number = number/i;
calc(number, list);
break;
}
i ;
}
}
}
网友回复:记号
网友回复:mark
网友回复:我也发一个
import java.io.*;
public class ZhiYinShu{
public static void main(String[] args){
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
try{
String line=in.readLine();
int n=Integer.parseInt(line);
ZhiYinShu.qiujie(n);
}catch(IOException e){
}
}
static void qiujie(int n){
int i=2;
for(;i <=n;i )
if(n%i==0)
break;
System.out.print(i);
if(n!=i) {
System.out.print( "* ");
qiujie(n/i);
}
else
System.out.print( '\n ');
return;
}
}
网友回复:强 !!!beexk(我要当牛人!!!!) ( ) 信誉:100 Blog 果然牛人.....
不过最后那个1能不能去掉 呵呵
网友回复:static void zhi(int num)
{
if(num==1)
{
System.out.print( "1 ");
}
else
{
out:
for(int i=2;i <=num;i )
{
if(num%i==0)
{
System.out.print(i);
num = num/i;
if(num != 1){
System.out.print( "* ");
zhi(num);
}
break out;
}
}
}
}
最简单的 修改自beexk(我要当牛人!!!!) ( ) 信誉:100
网友回复:拜一下楼上的各位大牛,冒昧的问一下这些算法是即时想出来的么,还是以前就研究过。。。
我只是想知道自己的差距
网友回复:1.先计算出不大于 N 的所有素数
2.从第一个素数2开始除,直到结果为1
网友回复:很好,很強大...看來我的路還很漫長...
关键字:质因数,整数,分解,语句,代码,
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面