C++进制处理题[第一周-T4] 新新口诀表

新新口诀表

题目描述

Aya 在背乘法口诀表。但是 Aya 在背的是一种很新的乘法口诀表。

具体而言,他背诵的是 P P P 进制的乘法口诀表。这样的乘法口诀表一共有 P − 1 P-1 P1 行,第 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 的数字用大写字母 ABC ⋯ \cdots 表示。

例如:12*11=132 15 15 15 进制下表示为 C*B=8C

样例 #1

样例输入 #1

4

样例输出 #1

1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21

样例 #2

样例输入 #2

12

样例输出 #2

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 2P36

#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;
}


你可能感兴趣的:(算法,c++,算法,学习,经验分享,笔记)