如题,请问有没有C++大佬知道这两种写法的不同? 在做矩阵快速幂一题中使用的这两种方法,但是第一种写了好久没有过(全WA);但是第二种就过了
第一种:写在里面
#include <iostream>
using namespace std;
const long long mod = 1e9 + 7;
struct matrix
{
long long n;
long long a[105][105];
matrix ()
{
for (long long i = 1;i <= n;i++)
for (long long j = 1;j <= n;j++)
a[i][j] = 0;
}
matrix (long long x)
{
n = x;
for (long long i = 1;i <= n;i++)
for (long long j = 1;j <= n;j++)
a[i][j] = 0;
for (long long i = 1;i <= n;i++)
a[i][i] = 1;
}
matrix operator * (const matrix & x) const
{
matrix ans;
ans.n = n;
for (long long k = 1;k <= n;k++)
for (long long i = 1;i <= n;i++)
for (long long j = 1;j <= n;j++)
{
ans.a[i][j] += a[i][k] * x.a[k][j] % mod;
ans.a[i][j] %= mod;
}
return ans;
}
};
long long n;
long long p;
........
第二种: 写在外面
#include <iostream>
using namespace std;
const long long mod = 1e9 + 7;
struct matrix
{
long long n;
long long a[105][105];
matrix ()
{
for (long long i = 1;i <= n;i++)
for (long long j = 1;j <= n;j++)
a[i][j] = 0;
}
matrix (long long x)
{
n = x;
for (long long i = 1;i <= n;i++)
for (long long j = 1;j <= n;j++)
a[i][j] = 0;
for (long long i = 1;i <= n;i++)
a[i][i] = 1;
}
};
long long n, p;
matrix operator * (const matrix & x, const matrix & y)
{
matrix ans;
ans.n = n;
for (long long i = 1;i <= n;i++)
for (long long j = 1;j <= n;j++)
for (long long k = 1;k <= n;k++)
{
ans.a[i][j] += y.a[i][k] * x.a[k][j] % mod;
ans.a[i][j] %= mod;
}
return ans;
}
.......
请问各位有知道这两种方法的区别吗?