首先,i=System.in.read();//这行有误,比如说你输入个数字5,实际上i返回的是5的ascii玛即53
然后,你的j的类型为int,这样,计算53的阶乘会溢出,结果就变成0了,呵呵,搂住可以做个实验,看看我说的对不对

解决方案 »

  1.   

    import java.io.* ;
    class jiecheng{public static void main(String args[]) throws IOException{ 
    long j=1;
    int i;
    char reads;
    String s="";
    while((i=System.in.read())!=-1){
    reads=(char)i;
    s+=reads;
    }while(i!=1)
    {j*=i;
    i--;
    } System.out.print(j);
    }
    }
    //实施这个,输入完后,回车,然后ctrl+z,回车
      

  2.   

    首先System.in.read()返回的虽然是个int,但是数字1和字母'1'是不同的,你虽然输入的是1但其实得到的却是其ascii码
    其次任何尝试用int/long作n!的尝试都将导致失败,你现在只有一位数的阶乘,还不会出问题,但是一旦你算到21,22,你就会得到一个负数,原因就是越界了,因此需要使用BigDecimal
      

  3.   

    //可以输入任何一个数,回车退出
    import java.io.* ;
    class jiecheng{public static void main(String args[]) throws IOException{ 
    long j=1;
    int i=0;
    char reads;
    String s="";
    int number=0;
    system.out.println("please input a number <65536");
    while((i=System.in.read())!='\n'){

             number=number*10+(int)i;
    }while(number!=1)
    {
    j*=number;
    number--;
    } System.out.print(j);
    }
    }
      

  4.   

    if the input is chars, then ?
    must controll the format
      

  5.   

    to  border88(今天不帅) :
              你的代码肯定越界的啊,稍微大一点的数就死的。程序里还有错误,不知道你帖之前自己测过没有