问题描述
九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。 例如,四进制下的乘法表如下所示:
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21
请注意,乘法表中两个数相乘的顺序必须为样例中所示的顺序,不能随意交换两个乘数。
给定 P,请输出 P 进制下的乘法表。
输入格式
输入一个整数 P。
输出格式
输出 P 进制下的乘法表。P 进制中大于等于 10 的数字用大写字母 A、B、C、··· 表示。
样例输入
4
样例输出
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21
样例输入
8
样例输出
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≤P≤36。
运行限制
最大运行时间:1s
最大运行内存: 256M
思路
- 首先按照大一的思路写出十进制 99乘法表的格式,不难
- 然后考虑到有进制要求,那么写一个函数fun,传入两个数的积(十进制)与进制数,返回这个积在相应进制下的值。
- 这里还要考虑数字大于10以后要用字母A到Z表示,只需输出的时候用ASCII码格式化即可,运算的时候当然用十进制
- 用到了好多我用Python写算法的技巧,比如进制转换、print()的深入理解。翻的笔记在这里了:【算法竞赛必备python工具】
Python代码
n=int(input())
def fun(a,b): #核心 a是传入的十进制积 b是进制值
l=[]
while a!=0:
l.insert(0,a%b) #数字取模是进制
a=a//b #数字取整是进制数
for each in range(len(l)):
if l[each]>=10:
l[each] = chr(ord('A') + l[each] - 10)
else:l[each]=str(l[each]) #输出时候格式化大于10的数字
return ''.join(l) #返回这个积在相应进制下的值
for i in range(1,n):
for j in range(1,i+1):
add=fun(i*j, n)
if i>=10: #输出时候格式化大于10的数字
x=chr(ord('A')+i-10)
else:x=i
if j>=10: #输出时候格式化大于10的数字
y=chr(ord('A')+j-10)
else:y=j #x、y保证add的传参是整形,否则报错
print(str(x),'*',str(y),'=',add,end=' ',sep='') #print()的深入理解
print(end='\n')
总结
带进制的题总是比较繁琐,用到的算法和格式比较灵活,但思路不算复杂,难度不高