求助大佬,这个问题好奇怪
查看原帖
求助大佬,这个问题好奇怪
173964
MACROHARD_CHENG楼主2021/10/26 23:56

为什么第一份代码会全WA,而第二份代码就过了,两份代码唯一的区别是第一份代码把n定义为全局变量而第二份代码把n定义为局部变量,有什么区别吗?

#include<iostream>
using namespace std;
const int maxd = 101;//最大位数
int g;//存储进位
int h,t;//存储百位,十位
int fac[maxd];
int ori[maxd];
int n;
void output(int *a)
{
	bool flag = false;
	for (int i = maxd; i >= 1; i--)
	{
		if (a[i] != 0) flag = true;
		if (flag) cout << a[i];
	}
}
int main()
{
	cin >> n;
	fac[1] = 1;
	ori[1] = 1;
	for (int i = 2; i <= n; i++)
	{
		//i是阶乘要乘的数阶乘 单步乘法
		for (int j = 1; j < maxd; j++)
		{
			//j是下标变量
			//处理阶乘 fac*i=factorial(i)
			fac[j] = fac[j] * i + g;
			g = fac[j] / 10;
			fac[j] %= 10;
		}
		g = 0;
		//ori+fac  单步加法
		for (int k = 1; k < maxd; k++)
		{
			ori[k] += (fac[k] + g);
			g = ori[k] / 10;
			ori[k] %= 10;
		}
		g = 0;
	}
	//输出函数
	output(ori);
	return 0;
}
#include<iostream>
using namespace std;
const int maxd = 101;//最大位数
int g;//存储进位
int h,t;//存储百位,十位
int fac[maxd];
int ori[maxd];
void output(int *a)
{
	bool flag = false;
	for (int i = maxd; i >= 1; i--)
	{
		if (a[i] != 0) flag = true;
		if (flag) cout << a[i];
	}
}
int main()
{
	int n;
	cin >> n;
	fac[1] = 1;
	ori[1] = 1;
	for (int i = 2; i <= n; i++)
	{
		//i是阶乘要乘的数阶乘 单步乘法
		for (int j = 1; j < maxd; j++)
		{
			//j是下标变量
			//处理阶乘 fac*i=factorial(i)
			fac[j] = fac[j] * i + g;
			g = fac[j] / 10;
			fac[j] %= 10;
		}
		g = 0;
		//ori+fac  单步加法
		for (int k = 1; k < maxd; k++)
		{
			ori[k] += (fac[k] + g);
			g = ori[k] / 10;
			ori[k] %= 10;
		}
		g = 0;
	}
	//输出函数
	output(ori);
	return 0;
}
2021/10/26 23:56
加载中...