题目描述
平衡三进制分别使用字符'-','0','1'表示-1,0,1。下表表示从0到10的十进制数对应的平衡三进制的值。
十进制 | 平衡三进制 |
0 | 0 |
1 | 1 |
2 | 1- |
3 | 10 |
4 | 11 |
5 | 1-- |
6 | 1-0 |
7 | 1-1 |
8 | 10- |
9 | 100 |
10 | 101 |
现在给你一个十进制整数,请将其转成对应的平衡三进制的串。
输入
第一行是一个整数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
十进制转化为平衡三进制,需要先将其转化为普通三进制,然后按照如下步骤从低位到高位操作。
1,遇到 0 和 1,直接跳过
2,遇到 2,当前位改为 -,下一位 +1
3,遇到 3,当前位改为 0,下一位 +1
#include <stdio.h>
int main()
{
int n,num[15],i,m;
char str[15];
scanf("%d",&n);
while(n--)
{
i = 0;
scanf("%d",&m);
if(m==0)
printf("0");
else
{
for(;m;i++)
{
if(m%3==1)
{
str[i] = '1';
m /= 3;
}
else if(m%3==2)
{
str[i] = '-';
m = m/3 + 1;
}
else
{
str[i] = '0';
m /= 3;
}
}
for(i--;i>=0;i--)
printf("%c",str[i]);
}
printf("\n");
}
return 0;
}