1298. 数制转换
Description
有一种数制的基数是3,权值可以取-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。
Input
文件有一行或多行,每行有一个整数N (-2,147,483,647≤N≤2,147,483,647),整数内不会有其他分隔符。
Output
对输入文件的每一行输出一行,该行是输入行的整数的新数制表示,不能有多余空行,每行之前不能有前导空格。
Sample Input
10
-3
Sample Output
101
-0
Problem Source
ZSUACM Team Member
注意各种情况咯。
#include <iostream> #include <cstring> using namespace std; int main() { int n; while(cin>>n) { if(n==0) { cout<<0<<endl; continue; } char result[50]; for(int i=0;i<50;i++) result[i]='A'; int shang,yu,i=0; while(n!=0) { yu=n%3; shang=n/3; if(yu==2) { shang++; result[i]='-'; } else if(yu==-1) { result[i]='-'; } else if(yu==1) { result[i]=1+'0'; } else if(yu==-2) { shang--; result[i]=1+'0'; } else result[i]='0'; n=shang; i++; } int index=49; while(result[index]=='A') index--; for(int i=index;i>=0;i--) cout<<result[i]; cout<<endl; } return 0; }