WOJ1319-数制转换

来源:互联网 发布:阿里云ecs建站教程 编辑:程序博客网 时间:2024/06/06 02:16

有一种数制的基数是三,权值可以取-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位整型可表示范围内),整数内不会有其他分隔符。

输出格式

对输入的每一个数字输出一行,该行是输入行整数的新数制表示。

样例输入

210-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;}


原创粉丝点击