现在的位置: 首页 > 综合 > 正文

1298. 数制转换

2012年07月19日 ⁄ 综合 ⁄ 共 878字 ⁄ 字号 评论关闭

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,647N2,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;
}

            

抱歉!评论已关闭.