马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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');
/* 每个数阶乘代码块 结束 */
}
}
|