题目很容易理解
思路也比较容易想到,唯一需要注意的点就是
注意这里在等式的前后如果出现>=10的数字都需要用字母表示!!!
思路分析:
因为每次相乘的前后两个数是固定的,也就是说我们其实已经知道等号后面输出的数字的十进制表示,那么我们写一个进制转换函数进行输出即可(可以仿照二进制转十进制的方法)
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string change(int num, int p) {
int temp = num;
string res = "";
while (temp) {
int n = temp % p;
if (n >= 10) {//注意>=10需要字母表示
int add = n - 10;
res += ('A' + add);
}
else {
res += to_string(n);
}
temp /= p;
}
reverse(res.begin(), res.end());//反转
return res;
}
int main() {
int p;
cin >> p;
for (int i = 1; i < p; i++) {
for (int j = 1; j <= i; j++) {
int temp = i * j;//十进制
string ans = change(temp,p);//转p进制
char ch1 = (char)(48 + i), ch2 = (char)(48 + j);//小于10时需要输出的
if (i >= 10) {
ch1 = (i - 10) + 'A';
}
if (j >= 10) {
ch2 = (j - 10) + 'A';
}
if (j == 1) {
cout << ch1 << "*" << ch2 << "=" << ans;
}
else {
cout << " " << ch1 << "*" << ch2 << "=" << ans;
}
}
cout << endl;
}
return 0;
}