BigInteger问题
import
java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class Fact{
public static void main(String args[]) throws
IOException{
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
String str;
int x;
System.out.println("输入一个整数,回车后求该整数的阶乘。");
System.out.println("输入quit,回车后退出程序运行。");
while(true)
{
str=buf.readLine();
if(str.equals("quit"))
break;
x=Integer.parseInt(str);
System.out.println(x+"的阶乘:"+factoria(x));
}
}
static BigInteger factoria(int k)
{ long t=1;
for(int i=1;i<=k;i++)
t=t*i;
return BigInteger.valueOf(t);
}
}
上面是一个求阶乘的程序,运行结果如下:
输入一个整数,回车后求该整数的阶乘。
输入quit,回车后退出程序运行。
4
4的阶乘:24
23
23的阶乘:8128291617894825984
40
40的阶乘:-70609262346240000
为什么40的阶乘变成负数了,我已经用BigInteger类啦!
------解决方案--------------------long的最大正值不超过10的19次方,40的阶乘超大了。