为什么第一份代码会全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;
}