1 条题解

  • 0
    @ 2025-8-24 22:41:48

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar yszkddzyh
    回首向来萧瑟处,归去,也无风雨也无晴

    搬运于2025-08-24 22:41:48,当前版本为作者最后更新于2023-02-23 15:24:16,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这题不需要任何高精,只需要进制转换。

    这里只需用到 1010 进制转 kk 进制,而在程序中我们经常用到短除法取余的方法。举个例子,当 k=3k=3 时,1010 进制数 413413 的转换过程是这样的:

    413÷3=1372413\div3=137\cdots\cdots2

    137÷3=452137\div3=45\cdots\cdots2

    45÷3=15045\div3=15\cdots\cdots0

    15÷3=5015\div3=5\cdots\cdots0

    5÷3=125\div3=1\cdots\cdots2

    1÷3=011\div3=0\cdots\cdots1

    把余数从下往上连起来,得 120022120022,事实上,这就是 41341333 进制数。

    因此我们很容易得到以下代码:

    #include <iostream>
    #include <algorithm>//reverse要用
    using namespace std;
    int n;
    char trans(int a){
        if(a%n<10) return a%n+'0';
        return a%n+'A'-10;//大于10时用大写字母
    }
    string ten_to_k(int x){//10进制转k进制
    	string a;//字符串存储
    	for(int i=0;x>0;i++) a+=trans(x),x/=n;//短除法
    	reverse(a.begin(),a.end());//翻转字符串,因为是从下往上
    	return a;
    }
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<n;i++,putchar(10))
    		for(int j=1;j<=i;j++)
    			cout<<ten_to_k(i)<<'*'<<ten_to_k(j)<<'='<<ten_to_k(i*j)<<' ';//循环输出
    	return 0;
    }
    
    • 1

    信息

    ID
    8089
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者