WOJ1319-数制转换

有一种数制的基数是三,权值可以取-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;
}


猜你喜欢

转载自blog.csdn.net/lxq1071717521/article/details/77921547