阶乘问题,菜鸟求解答
读入一个小于100的整数,求这个整数的阶乘(result)!!(未完成代码)
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个100以内整数:");
int n=sc.nextInt();
int result=1;
for(int i=1;i<=n;i++)
result*=i;
System.out.println(result);
就是运行以后,如果输入的数小于100,则输出结果,程序终止;
如果输入的数大于100;则提示System.out.println("数值超出允许范围,请重新输入:");然后用户再输入一个数,如果符合要求则输出结果,反之再次提醒重新输入,直至符合要求,然后程序终止; 基础,阶乘,循环,求助 --------------------编程问答-------------------- 试试这样,计算的最大值为13,超出就溢出了。
--------------------编程问答-------------------- 可以自己定义超大数的数据结构。或者使用java提供的BigInteger,不记得是不是这个类,反正java有提供超大数计算的类。 --------------------编程问答-------------------- 楼主的主要问题应该是INT超出上限的问题吧。 用大数据吧(BIGDECIMAL)
System.out.println("请输入一个小于100的整数:");
int n= scan.nextInt();
while(n<0||n>100){
System.out.println("输入整数超出范围,请重新输入:");
n = scan.nextInt();
}
BigDecimal a = new BigDecimal(1);
for(int i = 1 ; i < n ; i++){
a = a.multiply(new BigDecimal(i));
} --------------------编程问答-------------------- 多谢大神,那个大数据暂时没接触,本人新人小菜鸟!!! --------------------编程问答-------------------- 你写个while循环吧
如:
while(true) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个100以内整数:");
int n=sc.nextInt();
if (n <= 100) { //当小于等于100时跳出循环
break;
}
System.out.println超("数值允许范出围,请重新输入:");
}
--------------------编程问答-------------------- 明显楼上正解 --------------------编程问答-------------------- 如上面几位回答,用大数据计算.
在32位机上,int类型的字节数是2的32次方=4294967296(无符号),带符号再除以2,负数比正数多一个,-2147483648~+2147483647,计算超出13阶层就溢出了. --------------------编程问答-------------------- 哥们这个数字有点吓人哪。。。N多位。(输入99的时候出现)
代码如下;
--------------------编程问答-------------------- 其实呢,规范点的可以 用 try {} catch{}扑捉异常来判断输入的合法性~~~~
import java.math.BigInteger;
import java.util.Scanner;
public class TestTop {
/*public long show(long n){//计算大于70的数字时超出long的最大数字,会返回0
if (n==0 || n==1) {
return n;
}else{
//System.out.println(n);
return n*show(n-1);
}
}*/
public BigInteger getFactorial(int n) {//这个方法可以精确的计算.
if (n < 0) {
System.err.println("n必须大于等于0!");
return new BigInteger("-1");
} else if (n == 0) {
return new BigInteger("0");
}
//将数组换成字符串后构造BigInteger
BigInteger result = new BigInteger("1");
for (; n > 0; n--) {
//将数字n转换成字符串后,再构造一个BigInteger对象,与现有结果做乘法
result = result.multiply(new BigInteger(new Integer(n).toString()));
}
return result;
}
public static void main(String args[]) {
// TODO Auto-generated method stu
TestTop t =new TestTop();
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int s = sc.nextInt();
if(s<100){
BigInteger b = t.getFactorial(s);
System.out.println(b);
}else{
System.out.println("您输入的数字不符合规则!");
}
}
}
补充:Java , Java SE