黑马程序员技术交流社区
标题: 编程题。 [打印本页]
作者: 李洋- 时间: 2013-12-13 21:44
标题: 编程题。
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
请给个答案吧
作者: 熊猫86 时间: 2013-12-14 01:35
- package test;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- public class YueShuTest {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int num = 90;
- PrintYueShu pys = new PrintYueShu();
- pys.PrintValue(new YueShu().getYueShu(num), num);
- }
- }
- //定义一个类,封装一个存约数的方法,该方法以集合的形式记录该数的约数
- class YueShu {
-
- public List<Integer> getYueShu(int num) {
- List<Integer> al = new ArrayList<Integer>();
- if(num<2)
- throw new RuntimeException("数字有误,不存在约数");
- for(int x =2;num>=x; x++) {
- while(num%x==0) {
- al.add(x);
- if(num!=1)
- num = num/x;
- else
- al.add(num);
- }
- }
-
- return al;
- }
- }
- //定义一个类,封装打印约数的方法(传入一个集合及一个数字)
- class PrintYueShu {
- public void PrintValue(List<Integer> al,int num){
- Iterator<Integer> it = al.iterator();//用迭代器输出集合中的约数,并打印相应格式
- System.out.print(num+"=");
- while(it.hasNext()) {
- int i =it.next();
- if(it.hasNext())
- System.out.print(i+"*");
- else
- System.out.println(i);
- }
-
- }
- }
复制代码 以上基本可以完成需求~
异常处理没有考虑太多,直接抛RuntimeException了,代码中如有可优化的地方,还望指正。
作者: ζ丶凡σ 时间: 2013-12-14 16:36
import java.util.*;
public class Demo
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
System.out.print( "请键入一个正整数:");
int n = s.nextInt();
int k=2;
System.out.print(n + "=" );
while(k <= n)
{
if(k == n)
{System.out.println(n);break;}
else if( n % k == 0)
{
System.out.print(k + "*");n = n / k;
}
else k++;
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |