• XTU-OJ 1141-平衡三进制2


    题目描述

    平衡三进制分别使用字符'-','0','1'表示-1,0,1。下表表示从0到10的十进制数对应的平衡三进制的值。

    十进制平衡三进制
    00
    11
    21-
    310
    411
    51--
    61-0
    71-1
    810-
    9100
    10101

    现在给你一个十进制整数,请将其转成对应的平衡三进制的串。

    输入

    第一行是一个整数N,表示样例的个数。以后每行一个非负整数x,0≤x≤2^31-1。

    输出

    每行输出一个样例的结果。

    样例输入
    8
    0
    1
    2
    14
    19
    27
    61
    37726
    样例输出
    0
    1
    1-
    1---
    1-01
    1000
    1-1-1
    1-0-1-1-1-1

    解题思路:要做这题的平衡三进制,要先熟悉 普通的三进制。

    普通三进制由 0、1、2 三个数表示,并且 逢3进一,当 当前位 为2时 加一 后需要进位,比如 12 + 1 = 13,3要进位,所以 12 + 1 = 20。(这里都是三进制数)

    而平衡二进制是由 -1、0、1 三个数表示。用 -1 代替了 2,那当 三进制 要表示 2 的时候怎么办? 在10进制中,进行减法运算时,如果当低位不够减时,我们会从高位借个1出来,这个1的值就是10倍数。平衡三进制就采用同样的方法:(逆)借位。 先向高位进一位,同时在本位减去一个1,这样就能表示2啦(主动进1就相当于+3,然后本位减1,+3-1就等于2)。

    比如 题目中 0 对应 0(加粗表示10进制数);1 对应 1 2 就用 1- 表示 ( ‘-’ 对应 -1,1 在上一位,值等于 3)这就么一进位,然后再 减1,一加一减,就实现了 2 的表示。

    同理 5 在普通三进制中 表示为 12,在平衡三进制中,要进位、减一,变成 2-,此时 1 因为进位变成了2,所以又要进位、减一。最后就有   5 = 1--  。

    懂得了平衡三进制的原理,现在就容易写题了。 当 x%3 == 0/1 时,就是普通的三进制,当 x%3 == 2时,记住我们要干嘛? 要进位,然后减一。 减一 就用 ‘-’表示,进位 在 x = x/3 屁股后面 + 1就行了。(自己理解下,偶尔还是要动动脑子的,而且很简单,动手模拟一下)

    AC代码:

    1. #include
    2. int N,x,cnt;
    3. char base3[40];
    4. void exchange()
    5. {
    6. cnt = 0, base3[0] = '0'; //初始化,如果n=0,则base3 = '0';
    7. while (x)
    8. {
    9. if ( x%3 == 0) {base3[cnt++] = '0', x /= 3;}
    10. else if ( x%3 == 1) {base3[cnt++] = '1', x /= 3;}
    11. else {base3[cnt++] = '-', x = x/3+1;}
    12. }
    13. // 与第7、25行配合,如果不--,当n>0时,会从base3最后一位的下一位开始输出
    14. if (cnt > 0) cnt --;
    15. }
    16. int main()
    17. {
    18. scanf("%d",&N);
    19. while ( N --)
    20. {
    21. scanf("%d",&x);
    22. exchange();
    23. for (int i = cnt; i >= 0; i --)
    24. printf("%c",base3[i]);
    25. puts("");
    26. }
    27. return 0;
    28. }

  • 相关阅读:
    【rust/egui】(十)使用painter绘制一些图形—connections
    解读提示工程(Prompt Engineering)
    【华为机试真题 JAVA】字符串简单数据解压缩-100
    黑龙江省人口与社会经济数据集(2015-2016年)
    SpringBoot开发的实用小工具集,YYDS
    手写一个Webpack吧~
    SpringMVC 拦截器
    仿闪照功能娱乐微信小程序源码下载-带外卖CPS功能和流量主
    VIT(Vision Transformer)学习(三)-纯VIT之swin transformer模型理解
    STM32F4X I2C LM75
  • 原文地址:https://blog.csdn.net/Jay_is_Chou/article/details/133912158