|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
是一个计算阶乘的问题,我单独计算某阶阶乘的时候结果都是正确的(见代码1),但只是再外面多套一个循环就全乱套了(代码2),输出结果如图。找了很久找不到问题,麻烦大家帮忙看看。
代码一
- #include <stdio.h>
- #define MAX 100
- void main()
- {
- int n,num[MAX]={0},i,j,l,digit=1;
- printf("请输入要计算的阶乘:");
- scanf("%d",&n);
- num[0] = 1;
- {
- for (i = 1;i<=n;i++)//计算到第n阶
- {
- for (j=0;j<digit;j++)//每一位都乘i
- {
- num[j]=num[j]*i;
- }
- for (j=0;j<digit;j++)
- {
- if (num[j]/10 > 0)//某一位需要进位
- {
- num[j+1]+=num[j]/10;
- num[j] = num[j]%10;
- if (j == digit-1)//如果这一位是最大的那位
- {
- digit += 1;
- }
- }
- }
- }
- printf("%d! = ",n);
- for (i=digit-1;i>=0;i--)
- {
- printf("%d",num[i]);
- }
- putchar('\n');
- }
- }
复制代码
代码2:
- #include <stdio.h>
- #define MAX 100
- void main()
- {
- int n,num[MAX]={0},i,j,l,digit=1;
- printf("请输入要计算的阶乘:");
- scanf("%d",&n);
- num[0] = 1;
- for(l=1;l<=n;l++) //计算n次
- {
- for (i = 1;i<=l;i++)//计算到第l阶
- {
- for (j=0;j<digit;j++)//每一位都乘i
- {
- num[j]=num[j]*i;
- }
- for (j=0;j<digit;j++)
- {
- if (num[j]/10 > 0)//某一位需要进位
- {
- num[j+1]+=num[j]/10;
- num[j] = num[j]%10;
- if (j == digit-1)//如果这一位是最大的那位
- {
- digit += 1;
- }
- }
- }
- }
- printf("%d! = ",l);
- for (i=digit-1;i>=0;i--)
- {
- printf("%d",num[i]);
- }
- putchar('\n');
- }
- }
复制代码
那也同理。多几个变量而已
- #include <stdio.h>
- #define MAX 100
- void main()
- {
- int n,num[MAX]={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[i]=0;
- }
- num[0] = 1;
- /* 每个数阶乘代码块 开始 */
- for (i = 1;i<=n;i++)//计算到第n阶
- {
- for (j=0;j<digit;j++)//每一位都乘i
- {
- num[j]=num[j]*i;
- }
- for (j=0;j<digit;j++)
- {
- if (num[j]/10 > 0)//某一位需要进位
- {
- num[j+1]+=num[j]/10;
- num[j] = num[j]%10;
- if (j == digit-1)//如果这一位是最大的那位
- {
- digit += 1;
- }
- }
- }
- }
-
- printf("%d! = ",n);
- for (i=digit-1;i>=0;i--)
- {
- printf("%d",num[i]);
- }
- putchar('\n');
- /* 每个数阶乘代码块 结束 */
- }
- }
复制代码
|
-
-
|