首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个很老土的有关问题,100

2012-02-03 
一个很老土的问题,100!请教最短,最易读的1到100阶乘代码。呵呵。。。自己想了想没算出来哦。。。classProgram{int

一个很老土的问题,100!
请教最短,最易读的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我哈。。。

[解决办法]
這樣的算式用數字是不行的﹐太大﹐只能用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上面)

热点排行