XTU

您所在的位置:网站首页 三进制表达 XTU

XTU

2024-07-11 17:04| 来源: 网络整理| 查看: 265

题目描述

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

十进制平衡三进制001121-31041151--61-071-1810-910010101

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

输入

第一行是一个整数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  要进位、减一,变成 2-,此时 1 因为进位变成了2,所以又要进位、减一。最后就有   5 = 1--  。

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

AC代码:

#include int N,x,cnt; char base3[40]; void exchange() { cnt = 0, base3[0] = '0'; //初始化,如果n=0,则base3 = '0'; while (x) { if ( x%3 == 0) {base3[cnt++] = '0', x /= 3;} else if ( x%3 == 1) {base3[cnt++] = '1', x /= 3;} else {base3[cnt++] = '-', x = x/3+1;} } // 与第7、25行配合,如果不--,当n>0时,会从base3最后一位的下一位开始输出 if (cnt > 0) cnt --; } int main() { scanf("%d",&N); while ( N --) { scanf("%d",&x); exchange(); for (int i = cnt; i >= 0; i --) printf("%c",base3[i]); puts(""); } return 0; }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3