第一题答案,自己写的,望采纳
#include
typedef long matrix[9][9];
void mutiply(matrix a,matrix b)
{
//函数功能:令a=a*b
int p, q, k;
//新建c
matrix c={};
//计算乘法
for (p = 0; p < 9; ++p)
for (q = 0; q < 9; ++q)
for (k = 0; k < 9; ++k)
c[p][q] += a[p][k] * b[k][q];
//a=c
for (p = 0; p < 9; ++p)
for (q = 0; q < 9; ++q)
a[p][q]=c[p][q];
}
void add(matrix a,matrix b)
{
//函数功能:令a=a+b
int p, q;
for (p = 0; p < 9; ++p)
for (q = 0; q < 9; ++q)
a[p][q]+=b[p][q];
}
void pow(matrix a,int n)
{
//函数功能:计算a=a^n,返回a
if (n==0)
{
int p, q;
for (p = 0; p < 9; ++p)
for (q = 0; q < 9; ++q)
a[p][q]=1;
}
//n=1不用处理
//n>=2时
if(n>=2)
{
matrix b={};
int p, q;
for (p = 0; p < 9; ++p)
for (q = 0; q < 9; ++q)
b[p][q]=a[p][q];
while (n-->1) mutiply(a,b);
}
}
int main()
{
matrix a={0},b={0};
// 计算给出的表达式
// n为表达式最高次项的次数
int n=5;
for(int k=0;k{
//初始化a
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
a[i][j]=(i+j)%9+1;
pow(a,k);
add(b,a);
}
//输出原始a
printf("原始a:\n");
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{a[i][j]=(i+j)%9+1; printf("%d ",a[i][j]);}
printf("\n");
}
//输出计算结果b
printf("计算结果b:\n");
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
printf("%d ",b[i][j]);
printf("\n");
}
return 0;
}
第一题的数据可能很大,用long long估计都不够啊。我可以写第二道题。你的题目都是固定输入的吗?