YiMingC 发表于 2019-5-17 16:32:13

循环嵌套的问题

是一个计算阶乘的问题,我单独计算某阶阶乘的时候结果都是正确的(见代码1),但只是再外面多套一个循环就全乱套了(代码2),输出结果如图。找了很久找不到问题,麻烦大家帮忙看看。

代码一

#include <stdio.h>
#define MAX 100
void main()
{
      int n,num={0},i,j,l,digit=1;
      printf("请输入要计算的阶乘:");
      scanf("%d",&n);
      num = 1;
      {
                for (i = 1;i<=n;i++)//计算到第n阶
                {
                        for (j=0;j<digit;j++)//每一位都乘i
                        {
                              num=num*i;
                        }
                        for (j=0;j<digit;j++)
                        {
                              if (num/10 > 0)//某一位需要进位
                              {
                                        num+=num/10;
                                        num = num%10;
                                                                                if (j == digit-1)//如果这一位是最大的那位
                                        {
                                                digit += 1;
                                        }
                              }
                        }
                }                     
                                printf("%d! = ",n);
                for (i=digit-1;i>=0;i--)
                {
                                        printf("%d",num);
                }
                putchar('\n');
      }
}
代码2:
#include <stdio.h>
#define MAX 100
void main()
{
      int n,num={0},i,j,l,digit=1;
      printf("请输入要计算的阶乘:");
      scanf("%d",&n);
      num = 1;
      for(l=1;l<=n;l++)//计算n次
      {
                for (i = 1;i<=l;i++)//计算到第l阶
                {
                        for (j=0;j<digit;j++)//每一位都乘i
                        {
                              num=num*i;
                        }
                        for (j=0;j<digit;j++)
                        {
                              if (num/10 > 0)//某一位需要进位
                              {
                                        num+=num/10;
                                        num = num%10;
                                                                                if (j == digit-1)//如果这一位是最大的那位
                                        {
                                                digit += 1;
                                        }
                              }
                        }
                }                     
                                printf("%d! = ",l);
                for (i=digit-1;i>=0;i--)
                {
                                        printf("%d",num);
                }
                putchar('\n');
      }
}

ba21 发表于 2019-5-17 19:00:36

一个简单的求阶乘,被你搞得这么复杂。看了你的代码,我觉得这个世界真的是没有什么不可能。

亦即n!=1×2×3×...×n
求阶乘,这样不就可以了?

#include <stdio.h>

void main()
{
      int i, n, fac;

      printf("请输入要计算的阶乘:");
      scanf("%d",&n);


                fac = 1;
                for(i=1; i<=n; i++)
                {
                        fac *= i;
                }

                printf("%d!= %d\n", n, fac);

                return 0;

}


你问题2中想要得到的,这样不就好了。

#include <stdio.h>

void main()
{
    int i, j, n, m, fac;

    printf("请输入要计算的阶乘:");
    scanf("%d",&n);

        for (j=1; j<=n; j++)
        {
                fac = 1;
                m = j; // 第几阶
                for(i=1; i<=m; i++)
                {
                        fac *= i;
                }

                printf("%d!= %d\n", m, fac);
        }


        return 0;

}

YiMingC 发表于 2019-5-17 19:04:28

ba21 发表于 2019-5-17 19:00
一个简单的求阶乘,被你搞得这么复杂。看了你的代码,我觉得这个世界真的是没有什么不可能。

亦即n!=1× ...

哈哈 我写的确实复杂,这是我们学校老师留的作业,要求用数组来处理阶乘解决数太大的问题。我们老师看了这代码十分多钟也没找到问题出在哪...只能回来咱们论坛求助了(_)

ba21 发表于 2019-5-17 19:13:52

YiMingC 发表于 2019-5-17 19:04
哈哈 我写的确实复杂,这是我们学校老师留的作业,要求用数组来处理阶乘解决数太大的问题。我们老师看了 ...

那也同理。多几个变量而已

#include <stdio.h>
#define MAX 100
void main()
{
      int n,num={0},i,j,l,digit=1, m, k;
      printf("请输入要计算的阶乘:");
      scanf("%d",&m);


                for(k=1; k<=m; k++)
                {
                        // 初始化
                        n = k;
                        for(i=0; i<MAX; i++)
                        {
                                num=0;
                        }
                        num = 1;

                        /* 每个数阶乘代码块 开始 */
            for (i = 1;i<=n;i++)//计算到第n阶
            {
                  for (j=0;j<digit;j++)//每一位都乘i
                  {
                            num=num*i;
                  }

                  for (j=0;j<digit;j++)
                  {
                            if (num/10 > 0)//某一位需要进位
                            {
                                    num+=num/10;
                                    num = num%10;
                                    if (j == digit-1)//如果这一位是最大的那位
                                    {
                                          digit += 1;
                                    }
                            }
                  }
            }                     
            
                        printf("%d! = ",n);
            for (i=digit-1;i>=0;i--)
            {
                                printf("%d",num);
            }
            putchar('\n');

                        /* 每个数阶乘代码块 结束 */
                }

}

YiMingC 发表于 2019-5-17 20:42:02

ba21 发表于 2019-5-17 19:13
那也同理。多几个变量而已

啊对,算完一次以后忘了初始化数组了,明白了明白了,谢谢啦~
页: [1]
查看完整版本: 循环嵌套的问题