循环嵌套的问题
是一个计算阶乘的问题,我单独计算某阶阶乘的时候结果都是正确的(见代码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');
}
}
一个简单的求阶乘,被你搞得这么复杂。看了你的代码,我觉得这个世界真的是没有什么不可能。
亦即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;
} ba21 发表于 2019-5-17 19:00
一个简单的求阶乘,被你搞得这么复杂。看了你的代码,我觉得这个世界真的是没有什么不可能。
亦即n!=1× ...
哈哈 我写的确实复杂,这是我们学校老师留的作业,要求用数组来处理阶乘解决数太大的问题。我们老师看了这代码十分多钟也没找到问题出在哪...只能回来咱们论坛求助了(_) 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');
/* 每个数阶乘代码块 结束 */
}
} ba21 发表于 2019-5-17 19:13
那也同理。多几个变量而已
啊对,算完一次以后忘了初始化数组了,明白了明白了,谢谢啦~
页:
[1]