1 solutions

  • 0
    @ 2025-11-5 20:07:06

    C++ :

    #include<iostream>
    #include<cstdlib>
    using namespace std;
    int n;
    void init();
    void work(int);
    int main()
    {
    	init();
    	work(-2);
    	//cout<<-3/-2<<endl;
    	return 0;
    }
    void init()
    {
    	cin>>n;
    }
    void work(int k)
    {
    	int a[1000]={0};
    	int i=1,m=n,r;
    	if(m==0||m==1)//如果输入为0或者1直接输出 
    	{
    		a[i]=m;
    		cout<<m<<endl;
    		exit(0);
    	}
    	while(1)
    	{
    		r=m%k;//让为该数的余数,不过如果m为负,r可能为负 
    		m=m/k;		
    		if(r<0)//如果r为负只需减一个k即可为正, 
    		{
    			r=r-k;
    			m=m+1;	//多减一个k商就需加1 
    		}		
    		a[i]=r;
    		++i;
    		if(m==1)break;//这个条件只能在这里写,不能写在while的条件里,因为只有处理后m==1才能表明结束 
    		//cout<<i<<' ';	//如果不是-2进制,这个地方只要是m小于|k|即可	
    	}
    	a[i]=1;
    	for(int j=i;j>0;--j)cout<<a[j];
    	cout<<endl;
    }
    
    • 1

    Information

    ID
    20025
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By