⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 我做的一些C语言练习题,里面一共有76道题目,主要用到一些计算机常用的算法,如:递归,分治,动态规划,回溯法,AO算法等,除此之外还用到比较多的数学知识,我做了一部分,还有一些暂时还没做出来,大家也帮
💻 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 + -