有一种数制的基数是三,权值可以取-1,0,1,并且分别用符号-,0,1表示。这种数值的101便表示十进制的10,即1×3^2 + 0×3^1 + 1×3^0 = 10,又如这种数制的-0表示十进制的-3,即 -1×3^1 + 0×3^0 = -3。要求把给定的有符号整数转换为新数制的数,该数的前面不能有多余的0,例如10的新数制表示是101,则不要输出乘0101。
输入格式
数据第一行的数字T表示输入数据有T组,接下来的T行每行有一个整数N(32位整型可表示范围内),整数内不会有其他分隔符。
输出格式
对输入的每一个数字输出一行,该行是输入行整数的新数制表示。
样例输入
2 10 -3
样例输出
101 -0
#include<stdio.h>
#include<string.h>
char buf[128];
int length;
int main(){
int n,T;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
length=126;
if(n==0) buf[length--]='0';
buf[127]='\0';
while(n!=0){
if(n>0)
switch(n%3){
case 0: buf[length--]='0'; n=n/3; break;
case 1: buf[length--]='1'; n=(n-1)/3; break;
case 2: buf[length--]='-'; n=(n+1)/3; break;
}
else
switch(-n%3){
case 0: buf[length--]='0'; n=n/3; break;
case 1: buf[length--]='-'; n=(n+1)/3; break;
case 2: buf[length--]='1'; n=(n-1)/3; break;
}
}
puts(buf+length+1);
}
return 0;
}