请问如何求任意数的阶乘(用Java或C/C++实现均可)? 至于小数的算法程序就不用回了!请回复的高手注意以下几个问题:1.如果待求数(如1000000) 本身已经超过int或long或double所存储的范围,用什么接收待求数?2.如果用控制台输出,由于位数极多,像cmd窗口即使计算正确,也不能够完整显示出所有数字. (前面的数字被后面的覆盖)3.请注意效率问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Java里面有BigDecimal,应该可以满足你数域的问题,真不行就自己写一个BigNumber来保存,然后再写相关的乘法.效率的话,最快应该就是采用位运算.这个我研究不深,不能给你太多建议了.打印简单,输出到文件不就可以了~~在LINUX/UNIX下直接 在命令行后面"> out.txt" 1.如果待求数(如1000000) 本身已经超过int或long或double所存储的范围,用什么接收待求数?java用BigInteger,不过就是慢,没办法。3.请注意效率问题....没有解决方法。可能用64位机器会快些。或者自己参考BigInteger的方法改写,如不用每次new BigInteger()构建新对象.BigInteger的方法其实就是;将字节的移位算法换成用字符窜不过我想知道这程序用来干嘛? 用string做切割计算吧。超过最大变量能容纳值的运算,一般只能通过字符串切割来做。 1.skylovers(琴声刺骨)兄说的用文件>out.txt的确可行,谢谢2.eureka0891(迷茫中...)兄和eastred(东方红) 兄请你们看看我写的程序,改一下,再回复我自己写了一个程序,请改一下,让它能计算输入数大于int接受范围的数import javax.swing.*;import java.math.BigInteger;public class BigNumFrame extends JFrame { private JTextArea output; public BigNumFrame(){ super("阶乘计算器"); output=new JTextArea(); output.setLineWrap(true); output.setWrapStyleWord(true); JScrollPane out=new JScrollPane(output); getContentPane().add(out); setSize(400,300); setVisible(true); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try{ String input=JOptionPane.showInputDialog("请输入您要求阶乘的数:"); int n=Integer.parseInt(input); BigInteger result=BigInteger.ONE; for(int i=1;i<=n;i++) result=result.multiply(new BigInteger(""+i)); BigNumFrame app=new BigNumFrame(); app.output.setText(n+"!="+result); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } catch(Exception e){ System.exit(0); } }} 我自己又写的一个:理论上可以计算任何数的阶乘,只要机了受得了import javax.swing.*;import java.math.BigInteger;public class JieCheng extends JFrame { /** * @author Min Shakes */ private JTextArea output; private BigInteger cal(String input){ //计算方法cal BigInteger result=BigInteger.ONE; BigInteger max=new BigInteger(input); for(BigInteger i=BigInteger.ONE;max.compareTo(i)!=-1;i=i.add(BigInteger.ONE)) result=result.multiply(i); return result; } public JieCheng(){ //constructor super("阶乘计算器"); output=new JTextArea(); output.setLineWrap(true); //设置JTextArea自动换行 output.setWrapStyleWord(true); JScrollPane out=new JScrollPane(output); getContentPane().add(out); setSize(400,300); setVisible(true); } public static void main(String[] args) { // TODO Auto-generated method stub try{ String input=JOptionPane.showInputDialog("请输入您要求阶乘的数:"); JieCheng app=new JieCheng(); app.output.setText(input+"!="+app.cal(input)); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } catch(Exception e){ System.exit(0); } }} 看看这个吧 :blog.csdn.net/liangbch swing包的应用 如何使组件在几个同心圆上显示并改变颜色? 深度解析工业图形专家(VG)在delphi中的使用 请问高手我的一个彩票系统不显示随机抽取的号码? 怎么把一个文本文件里面的所有内容读取到一个字符串里面? 请问有关类型转换char[] ==> byte[] 在线急等! 想写个泛型的NullOrEmpty,不知可行否? 帮我看一段程序,为什么会发生这样的错误,谢谢,我用的工具是JCREATOR 各位大虾,哪里能下载JBuilder 6.0,谢谢了 StringBuffer传的不是引用吗? 计算N!(n=8)的阶乘的问题 用httpclient访问https站点的问题,急啊
打印简单,输出到文件不就可以了~~在LINUX/UNIX下直接 在命令行后面"> out.txt"
java用BigInteger,不过就是慢,没办法。3.请注意效率问题
....没有解决方法。可能用64位机器会快些。或者自己参考BigInteger的方法改写,如不用每次new BigInteger()构建新对象.BigInteger的方法其实就是;将字节的移位算法换成用字符窜不过我想知道这程序用来干嘛?
2.eureka0891(迷茫中...)兄和eastred(东方红) 兄请你们看看我写的程序,改一下,再回复
我自己写了一个程序,请改一下,让它能计算输入数大于int接受范围的数
import javax.swing.*;
import java.math.BigInteger;public class BigNumFrame extends JFrame {
private JTextArea output;
public BigNumFrame(){
super("阶乘计算器");
output=new JTextArea();
output.setLineWrap(true);
output.setWrapStyleWord(true);
JScrollPane out=new JScrollPane(output); getContentPane().add(out);
setSize(400,300);
setVisible(true);
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
String input=JOptionPane.showInputDialog("请输入您要求阶乘的数:"); int n=Integer.parseInt(input);
BigInteger result=BigInteger.ONE;
for(int i=1;i<=n;i++)
result=result.multiply(new BigInteger(""+i));
BigNumFrame app=new BigNumFrame(); app.output.setText(n+"!="+result);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
catch(Exception e){
System.exit(0);
} }}
import javax.swing.*;
import java.math.BigInteger;public class JieCheng extends JFrame {
/**
* @author Min Shakes
*/
private JTextArea output;
private BigInteger cal(String input){ //计算方法cal
BigInteger result=BigInteger.ONE;
BigInteger max=new BigInteger(input);
for(BigInteger i=BigInteger.ONE;max.compareTo(i)!=-1;i=i.add(BigInteger.ONE))
result=result.multiply(i);
return result;
}
public JieCheng(){ //constructor
super("阶乘计算器");
output=new JTextArea();
output.setLineWrap(true); //设置JTextArea自动换行
output.setWrapStyleWord(true);
JScrollPane out=new JScrollPane(output);
getContentPane().add(out);
setSize(400,300);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
String input=JOptionPane.showInputDialog("请输入您要求阶乘的数:");
JieCheng app=new JieCheng();
app.output.setText(input+"!="+app.cal(input));
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
catch(Exception e){
System.exit(0);
}
}
}