浏览 4152 次
锁定老帖子 主题:计算任意正整数的阶乘
精华帖 (0) :: 良好帖 (0) :: 新手帖 (11) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-12
由于阶乘的结果会超出java数据类型的最大范围,所以采用数组或集合作为存储结果的方式;集合具有长度的自动伸缩,故采用集合作为最终的存储方式; 算法如下: 各位相乘,满十进一位;
package com.datastruct.array; import java.util.ArrayList; import java.util.List; /** * 求n! * @author ikon * */ public class Factorial { public static void main(String[] args){ List<Integer> datas = new ArrayList<Integer>(); datas.add(1); System.out.print("输入要计算的阶乘的数字 : "); ConsoleReader console = new ConsoleReader(System.in); int n = console.readInt(); for(int i=1;i<=n;i++){ for(int j=0;j<datas.size();j++){ datas.set(j, datas.get(j)*i); } for(int j=0;j<datas.size();j++){ if(datas.get(j)>9){ if(datas.size()==j+1){ datas.add(j+1,0); //这里要注意进位,调用add } datas.set(j+1, datas.get(j+1)+datas.get(j)/10); datas.set(j, datas.get(j)%10); } } } System.out.print(n+"!="); for(int index=datas.size()-1;index>-1;index--){ System.out.print(datas.get(index)); } } }
ConsoleReader是个接收终端输入的工具类,如下:
package com.datastruct.array; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; public class ConsoleReader { public ConsoleReader(InputStream inStream) { reader = new BufferedReader (new InputStreamReader(inStream)); } public int readInt() { String inputString = readLine(); int n = Integer.parseInt(inputString); return n; } public double readDouble() { String inputString = readLine(); double x = Double.parseDouble(inputString); return x; } public String readLine() { String inputLine = ""; try { inputLine = reader.readLine(); } catch(IOException e) { System.out.println(e); System.exit(1); } return inputLine; } private BufferedReader reader; }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-11-24
效率没有用数组高,一个数的阶乘,明显是确定位数的
|
|
返回顶楼 | |