📄 main.cpp
字号:
/*******************************************************************************
40. 一个整型变量只能用来存贮较小的 N!的值,当 N 较大时,可将阶乘值中的
每一个数字放在一个一维数组的一个元素中。使用这方法,打印:
① N!的值;
② N!-M!(M>N);
③ N!+M!
******************************************************************************/
#include <stdio.h>
#define N 1000
void InitRs(int rs[])
{
int i;
for(i=0; i<N; i++)
rs[i] = 0;
}
void CalcFact(int rs[],int n)
{
int i,k;
int val,cf=0;
rs[0] = 1;
for(i=1; i<=n; i++)
{
for(k=0; k<N; k++)
{
val = rs[k] * i + cf;
cf = val / 10;
val = val % 10;
rs[k] = val;
}
}
}
void CalcAdd(int rs[],int rs1[],int rs2[])
{
int i;
int val,cf=0;
for(i=0; i<N; i++)
{
val = rs1[i] + rs2[i] + cf;
cf = val / 10;
val = val % 10;
rs[i] = val;
}
}
void CalcSub(int rs[],int rs1[],int rs2[])
{
int i;
int val,cf=0;
for(i=0; i<N; i++)
{
val = rs1[i] - rs2[i] + cf;
if(val<0)
{
cf = -1;
val = 10 + val;
}
else
{
cf = val / 10;
val = val % 10;
}
rs[i] = val;
}
}
void PrintRs(int rs[])
{
int i=N-1;
while(i>=0 && rs[i]==0)
i--;
if(i<0)
printf("0\n");
else
{
while(i>=0)
{
printf("%d",rs[i]);
i--;
}
}
printf("\n");
}
void main()
{
int rs[N];
int rs1[N];
int rs2[N];
int m,n;
printf("请输入N和M的值:");
scanf("%d%d", &n ,&m);
InitRs(rs1);
InitRs(rs2);
printf("N! = ");
CalcFact(rs1,n);
PrintRs(rs1);
printf("M! = ");
CalcFact(rs2,m);
PrintRs(rs2);
printf("N! - M! = ");
InitRs(rs);
if(n >= m)
{
CalcSub(rs,rs1,rs2);
PrintRs(rs);
}
else
{
CalcSub(rs,rs2,rs1);
printf("-");
PrintRs(rs);
}
printf("N! + M! = ");
InitRs(rs);
CalcAdd(rs,rs1,rs2);
PrintRs(rs);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -