本帖最后由 yejb0908 于 2009-12-07 13:53:18 编辑

解决方案 »

  1.   

      //n的阶乘和,结果错误
                Console.WriteLine("求1!+2!+3!+……+n!,输入n");
                int n = int.Parse(Console.ReadLine());
                ulong factorial = 1;
                while (true)
                {
                    factorial *= n;                               n--;
                    if (n == 0)
                    {
                        break;
                    }
                }
                Console.WriteLine(factorial );
                Console.ReadLine();
      

  2.   

    这个说起来可长了,听起来似乎也很复杂。首先呢,n的阶乘可以这么计算(前n-1的阶乘)*n。
    你用for循环的时候factorial里边装的实际上就是前n-1的阶乘值,所以再乘一个n就可以得到第n项的阶乘。此时再与前n-1项的阶乘和相加就是n项的阶乘和,于是for循环式对的。
    如果你改用while,你的方法写错了。不知是不是要我写一写该怎么计算?你可以琢磨下。计算n阶阶乘的时候,while和for应该是怎么计算都不会错的,只是你的for循环中多了一句话
    i += 1;//多了这个
    去掉后应该就对了。
      

  3.   

    算法本身有问题,根本算不出答案呗;
    用while求阶乘和,factorial *= n;这句你的目的应该就是求阶乘,但是这个结果不是阶乘,而仅仅是n而已
    用for求阶乘,我不明白for循环里面再加一个i += 1;是什么意思
    遇到得不到答案的算法,设个断点,对你关注的变量加监视,就可以找出原因所在
      

  4.   

    用while的是N的阶乖之和吗? 你的是:"n+n*(n-1)+n*(n-1)*(n-2)"
        这是不对的,自己再试试!
      

  5.   

     Console.WriteLine("求1!+2!+3!+……+n!,输入n");
                int n = int.Parse(Console.ReadLine());
                ulong factorial = 1;
                while (true)
                {
                    factorial *= n;                               n--;
                    if (n == 0)
                    {
                        break;
                    }
                }
                Console.WriteLine(factorial );
                Console.ReadLine();
      

  6.   

    n的阶乘那计算我知道,刚发帖自己看了下就发现了,那种错误实在不应该。n的阶乘和用for循环的实现算法我明白,主要是不明白用while倒推错在哪了。 - -
      

  7.   

    factorial指n的阶乘,sum指n个阶乘的和,也就是要求的1!+2!…… +n!
      

  8.   

    上面的程序结果是1+1*2+1*2*3+1*2*3*4+..........+1*2*...*n
    下面的程序结果是n+n*(n-1)+n*(n-1)*(n-2)+..........+n*(n-1)....*2*1
    结果是完全不相同的!
      

  9.   


                //n的阶乘和,结果错误
                  Console.WriteLine("求1!+2!+3!+……+n!,输入n");
                int n = int.Parse(Console.ReadLine());
                ulong factorial = 1, sum = 0,i=1;
                while (true)
                {
                    factorial *= i;
                    sum += factorial;
                    i++;
                    if (i > n)
                    {
                        break;
                    }
                }
                Console.WriteLine(sum);
                Console.ReadLine();
      

  10.   

    namespace ConsoleApplication11 {
        class Program {
            static void Main(string[] args) {
                Console.WriteLine("求1!+2!+3!+……+n!,输入n");
                int n = int.Parse(Console.ReadLine());
                ulong factorial=0, sum = 0;
                for (int i = n ; i > 0 ; i--) {
                    int j=i;factorial=1;
                    while (true) {
                        factorial *= (ulong)j;
                        //sum += factorial;
                        j--;
                        if (j == 0) {
                            break;
                        }
                    }
                    sum += factorial;            }
                Console.WriteLine(factorial);
                Console.WriteLine(sum);
                Console.ReadLine();
            }
        }
    }
      

  11.   

    n阶的阶乘和如果用while可以这么写ushort n = 10;//假如计算10的阶乘和
    ushort curPosition = n;//从第n个开始计算
    long fatorial = 0, result = 0;while(curPosition > 0)
    {
       fatorial += curPosition--;
    }
    //此时已经计算完成n!  然后加入结果中
    result += fatorial;
    curPosition = n - 1;//开始计算前n-1项的阶乘和
    while(curPosition > 0)
    {
       fatorial /= curPosition;
       result += fatorial;
    }
      

  12.   

    楼上的这个写法
    while(curPosition > 0) 

      fatorial += curPosition--; 
    } 很漂亮