题目描述:
九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。
例如, 四进制下的乘法表如下所示:
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21
请注意,乘法表中两个数相乘的顺序必须为样例中所示的顺序,不能随意交换两个乘数。
给定 P,请输出 P 进制下的乘法表。
输入格式
输入一个整数 P。
输出格式
输出 P 进制下的乘法表。P 进制中大于等于 1010 的数字用大写字母 A
、B
、C
、⋯⋯ 表示。
输入输出样例
输入 #1
4
输出 #1
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21
输入 #2
8
输出 #2
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=11
4*1=4 4*2=10 4*3=14 4*4=20
5*1=5 5*2=12 5*3=17 5*4=24 5*5=31
6*1=6 6*2=14 6*3=22 6*4=30 6*5=36 6*6=44
7*1=7 7*2=16 7*3=25 7*4=34 7*5=43 7*6=52 7*7=61
说明/提示
对于所有评测数据, 2≤�≤362≤P≤36。
蓝桥杯 2020 第三轮省赛 AB 组 G 题。
解题思路:
首先我们需要知道,10进制转化为n进制的方法。以180转化为6进制为例。
180 % 6 = 0
180 / 6 = 30
30 % 6 = 0
30 / 6 = 5
5 % 6 = 5
5 / 5 = 0
将取到的模数调转,就变成500.那么180的6进制形式就是500。
我们可以很轻易的得到乘法表的打印方法(由两个for循环嵌套),我们将乘数与得到的答案进行进制转化,。需要注意的是如果超过10进制,后序会有ABC此类。我们可以通过ASCLL码进行转化。
样例代码:
cpp
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
string jinzhi(int k, int n)//待转换进制的数,转换进制
{
string sum;
while (k)
{
int add = k % n;
if (add >= 10)
{
sum += add - 10 + 'A';
}
else
{
sum += add + '0';
}
k = k / n;
}
reverse(sum.begin(),sum.end());
return sum;
}
int main()
{
int n;
cin >> n;
for (int i = 1; i < n; i++)
{
for (int j = 1; j <= i; j++)
{
cout << jinzhi(i , n) << '*' << jinzhi(j, n) << '=' << jinzhi(i * j, n) << ' ';
}
printf("\n");
}
return 0;
}