问题描述
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
int m=reader.nextInt();
int[][] arr=new int[n][n];
int[][] arr1;
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
arr[i][j]=reader.nextInt();
}
}
arr1=arr;
if (m == 0) { //当M=0时结果为单位矩阵
for (int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if (i == j) {
System.out.print(1 + " ");
} else {
System.out.print(0 + " ");
}
}
System.out.println();
}
} else if (m == 1) { //当M=1时结果为原来的矩阵
for (int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
} else {
for (int x=1;x<m;x++){//循环要比幂少一次,一次幂不变
int[][] arr2=new int[n][n];//这一步非常重要,不能提前定义
//初始化数组使数组值为0,用于清空上次结果。就因为这一步卡了一下午呀!!!
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
arr2[i][j] += arr[i][k] * arr1[k][j];//矩阵乘积公式
}
}
}
arr1 = arr2;
}
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
System.out.print(arr1[i][j]+" ");
}
System.out.println();
}
}
}
}