在java中为什么在算阶乘是 要在int变量的数据减48在参加运算

解决方案 »

  1.   

    网上找来的,没看到有一个跟48有关系的,转自信息产业培训网的BLOG 这里有四个关于计算阶乘的,难度依次提升,全部通过测试。
    这应该是基本代码了,与之共勉。 
    这是利用简单的循环相乘制造的阶乘。
    public class Factorial {
        public static int factorial(int x) {
            if (x < 0) {
                throw new IllegalArgumentException("x must be>=0");
            }
            int fact = 1;
            for (int i = 2; i <= x; i++) {
                fact *= i;
            }
            return fact;
        }   public static void main(String args[]) {        System.out.print(factorial(10));
        }
    }这个是利用递归算法制成的。public class factorial2 {
        public static int factorial2(int x) {
            if (x < 0) {
                throw new IllegalArgumentException("x must be>=0");
            }
            if (x <= 1) {
                return 1;
            } else
                return x * factorial2(x - 1);
        }
        public static void main(String args[]) {        System.out.print(factorial2(17));
        }
    }这个是数组添加的方法制成的,可以计算更大的阶乘。public class Factorial3 {
        static long[] table = new long[21];
        static {table[0] = 1; }    static int last = 0;
        public static long factorial(int x) throws IllegalArgumentException {
            if (x >= table.length) {
                throw new IllegalArgumentException("Overflow; x is too large.");
            }
            if (x <= 0) {
                throw new IllegalArgumentException("x must be non-negative.");
            } while (last < x) {
                table[last + 1] = table[last] * (last + 1);
                last++;
            }
            return table[x];
        }
            public static void main(String[] args) {最后一个是利用BigInteger类制成的,这里可以用更大的更大的阶乘。import java.math.BigInteger;
    import java.util.*;
    public class Factorial4{
        protected static ArrayList table = new ArrayList();
        static{ table.add(BigInteger.valueOf(1));}    public static synchronized BigInteger factorial(int x){
            for(int size=table.size();size<=x;size++){
                BigInteger lastfact= (BigInteger)table.get(size-1);
                BigInteger nextfact= lastfact.multiply(BigInteger.valueOf(size));
                table.add(nextfact);
            }
            return (BigInteger) table.get(x);
        }
    }            System.out.print(factorial(20));
            }
        }
      

  2.   

    若是ascii字符,也许要-48(数字0对应的ascii为48);其他情况没有理由-48
      

  3.   

    import java.io.IOException;                                       
    class Test7{                                                      
    public static void main(String[] args)throws IOException{       
    int i,n,sum=1;                                                
    System.out.println("Please input(0~~15):");                   
    n=System.in.read();                                           
    n-=48;                                                        
    for(i=1;i<=n;i++)                                             
    sum*=i;                                                     
    System.out.println(n+"!="+sum);                             
    }                                                             
    }                                                               
    这就是我要问的代码为什么n-=48 在参加运算
      

  4.   

    System.in.read();
    读取的是字符的ascii码。
    说明:
    return
        the next byte of data, or -1 if the end of the stream is reached.