Aya 在背乘法口诀表。但是 Aya 在背的是一种很新的乘法口诀表。
具体而言,他背诵的是 P P P 进制的乘法口诀表。这样的乘法口诀表一共有 P − 1 P-1 P−1 行,第 i i i 行有 i i i 列,第 j j j 列表示 i × j i\times j i×j 的情况。每一列以空格隔开。乘法口诀表中的运算都在 P P P 进制下进行。例如下图是 P = 4 P=4 P=4 的情况。
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21
Aya 给了你 P P P,请你输出 P P P 进制下的乘法表。
输入一个正整数 P P P。
输出
P
P
P 进制下的乘法表。
P
P
P 进制中大于等于
10
10
10 的数字用大写字母 A
、B
、C
、
⋯
\cdots
⋯ 表示。
例如:12*11=132
在
15
15
15 进制下表示为 C*B=8C
。
4
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21
12
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=10 4*4=14
5*1=5 5*2=A 5*3=13 5*4=18 5*5=21
6*1=6 6*2=10 6*3=16 6*4=20 6*5=26 6*6=30
7*1=7 7*2=12 7*3=19 7*4=24 7*5=2B 7*6=36 7*7=41
8*1=8 8*2=14 8*3=20 8*4=28 8*5=34 8*6=40 8*7=48 8*8=54
9*1=9 9*2=16 9*3=23 9*4=30 9*5=39 9*6=46 9*7=53 9*8=60 9*9=69
A*1=A A*2=18 A*3=26 A*4=34 A*5=42 A*6=50 A*7=5A A*8=68 A*9=76 A*A=84
B*1=B B*2=1A B*3=29 B*4=38 B*5=47 B*6=56 B*7=65 B*8=74 B*9=83 B*A=92 B*B=A1
对于所有数据, 2 ≤ P ≤ 36 2 \leq P \leq 36 2≤P≤36。
#include
#include
using namespace std;
int P;
string toBase(int n, int P) { //转换成p进制
string r = "";
while (n > 0) {
int m = n % P;
char d;
if(m>=10){
d = 'A' + m - 10;
}
else{
d = '0' + m;
}
r = d + r;
n /= P;
}
return r;
}
int main() {
scanf("%d",&P);
for (int i = 1; i <= P - 1; ++i) {
for (int j = 1; j <= i; ++j) {
int r = i * j;
string rs = toBase(r, P);
string is = toBase(i, P);
string js = toBase(j, P);
cout << is << "*" << js << "=" << rs;
if(j<i){
cout<<" ";
}
}
cout << endl;
}
return 0;
}