- . -
. . -可修编-
/****** 定义变量局部 ******/
int n;/***定义核心变量n ***/
int i,j,k=0;/***定义辅助变量***/
int a[200]={1},m;
/***定义并初始化数组a , 其中m=结果的位数除以4的余数***/
/****** 获取用户输入的数据 ******/
printf("please input a number 〔1~100〕n: \n ");
scanf("%d",&n);
/****** 输入数据不合要求时的情况处理 ******/
if(n>100||n<1)
printf("Sorry!You enter a wrong number. \n");
for(i=1;i<=n;i++)
{
for(j=0;j<200;j++)
{
a[j]*=i;
}
for(j=0;j<200;j++)
{
a[j+1]+=a[j]/10;
a[j]%=10;
}
}
核心
上面的这一模块为核心模块,是用乘法的根本原理把用户给的数据求得阶乘后的结果的个、十、百、千...位依次赋数给数组a[200],即a[0] =个位上的数,a[1] =十位上的数 .....
- . -
. . -可修编-
for(i=199;i>=0;i--)
{
if(a[i]!=0)
{
j=i;
break;
}
} /***求出n阶乘结果的位数减一 (结果位数为j+1)***/
m=(j+1)%4;/***算出结果的位数除以4的余数***/
printf("the factorial of %d is:\n ",n);
/****** 按要求输出结果 ******/
if(m!=0)
{
for(i=j;i>=0;i--)
{
printf("%d",a[i]);
k++;
if(k==m)
break;
} /*** 输出余数不为零时第一个逗号前的数 ***/
for(i=j-m;i>=0;i--)
{
if((k-m)%4==0)
printf(",");
printf("%d",a[i]);
k++;
}
printf("\n");
}/***** 按要求输出余数不为零时剩下的数 *****/
else
{
for(i=j;i>=0;i--)
{
printf("%d",a[i]);
k++;
if(k%4==0&&k!=j+1)
printf(",");
}
printf("\n
n的阶乘程序报告 来自淘豆网m.daumloan.com转载请标明出处.