请教最短,最易读的1到100阶乘代码。呵呵自己想了想没算出来哦
class Program
    {
        int zore = 3;   //用于计算有多少个零
        static void Main(string[] args)
        {
            Program p = new Program();
            ArrayList al = p.aa();
            al=p.bb(p.bb(al));
            foreach (long s in al)
            {
                Console.WriteLine(s);
            }
            Console.Read();
        }
        //分解数组
        private ArrayList bb(ArrayList al)
        {
            ArrayList all = new ArrayList();
            Console.WriteLine(al.Count);
            if (al.Count % 2 == 0)
            {
               // Console.WriteLine("{0}", al[al.Count / 2]);
                all.Add(cc(long.Parse(al[al.Count/2].ToString())));
            }
            for (int i = 0,j=al.Count-1; i < j;i++,j-- )
            {
                long sum = long.Parse(al[i].ToString()) * long.Parse(al[j].ToString());
                all.Add(cc(sum));
            }
            return all;
        }
        //第一次运算,用于取出第一次的零,以及其它数
        private ArrayList aa()
        {
            ArrayList al = new ArrayList();
            al.Add(5);
            for (int i = 1, j = 99; i < j; i++, j--)
            {
                long sum = i * j;
                al.Add(cc(sum));
            }
            return al;
        }        //取零的方法
        private long cc(long sum)
        {
            while (sum % 10 == 0)
            {
                zore ++;
                sum /= 10;
            }
            return sum;
        }
    }大家别BS我哈

解决方案 »

  1.   

    int s=1;
    for(int i=1;i<=100;i++)
    {
        s+=s*i;
    }
      

  2.   

    晕...什么东东?看得头大,不过llm89721630的方法肯定不行的,没有那么大的数来存储,你试试看吧
    N久以前做过了,不过程序不在我的这台本本里,呵呵...好像我做的没你这么长,思路也差不多吧,忘了,这种东西最好是在C里写的
      

  3.   

    难道Long也不行
    这东西多过很多次嘛,现在记不得有什么问题
      

  4.   

    大数相乘?不太明白你的意思,最好能有相关代码,至于iim89721630的方法肯定是错的,忘了说了这曾经是某个公司(很多程序员做梦都想进的公司)的面试题,所以不会这么容易过关哦。还有C版的我写过一个(很早以前,忘了是怎么写的了)。现在想要的是C#版的。能提供正确代码的朋友感谢不尽。。
      

  5.   

    我算出来这个数:1.26765060022823E+30
    太大 不知道对不对
    double s = 1;
    for(int i = 1;i<=100;i++)
    {
    s += s*1;
    }
    MessageBox.Show(s.ToString());
    只会这种简单的写法
      

  6.   

    首先需要说明的一点是,double不适合用于算这样的题,因为双精度浮点型的精度很明显达不到要求,而且double里存放的并不是准确值,而是一个近似值。
    第二,略。
      

  7.   

    這樣的算式用數字是不行的﹐太大﹐只能用string表示﹐提供個思路﹕
    任何兩個整數相乘﹐者可表示成﹕
    n0+n1*10^m1+n2*10^m2...nn*10^mn
    n0,n1,n2..nn為從右到左﹐固定長度的字符(可設為5位)
    m1,m2...mn依次為n1,n2...nn的開始位置
    然后依次與1到100類的數相乘(注意﹕相乘后﹐如果超出5位﹐則要將超出的部分加到下一個n上面)
      

  8.   

    真正计算机中计算阶乘,有特殊的公式,不是n*(n-1)...这样来算...对付面试题的话,一个大数乘法,一个递归函数n!=n*(n-1)!,就行了...