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