十进制数n转成b进制和2的幂次方表示

此时心情和上一篇一样,qwq,于是,撒花

写完我就不想开电脑了 

题目1:将非负十进制整数n转换成b进制。(其中b=2~16)

题目2:任何一个正整数都可以用2的幂次方表示。例如:

    137=2^7+2^3+2^0    

  同时约定幂次方用括号来表示,即ab 可表示为a(b)。

     由此可知,137可表示为:

       2(7)+2(3)+2(0)

  进一步:7= 2^2+2+2^0   (21用2表示)

       3=2+2^0  

  所以最后137可表示为:

       2(2(2)+2+2(0))+2(2+2(0))+2(0)

     又如:

       1315=2^10 +2^8 +2^5 +2+2^0

  所以1315最后可表示为:

     2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

  输入:正整数(n≤20000)

输出:符合约定的n的0,2表示(在表示中不能有空格)

输入格式 Input Format

        一个正整数

输出格式 Output Format      

        符合约定的n的0,2表示(在表示中不能有空格)

样例输入 Sample Input

73

样例输出 Sample Output      

 2(2(2)+2)+2(2+2(0))+2(0)

 题目一:

#include<iostream>
using namespace std;
void Shift_Two(long n)//二进制 
{
 	long c;
    if(n/2>0)
        Shift_Two(n/2);
        c=n%2;
      
    cout<<c;
    
}

void Shift_Four(int n)//四进制 
{
		long c;
    if(n/4>0)
        Shift_Two(4/2);
        c=n%4;
      
    cout<<c;
 } 
void K()
{
	cout<<' '<<endl;
}
void Shift_Eight(long n)//八进制 
{
	long c;
	if(n/8>0)
	Shift_Eight(n/8);
	c=n%8;

	cout<<c;
}


void Shift_Sixteen(int n)//十六进制 
{
	string str;
    if(n == 0) return ;
    else
    {
        int j = (n%16);
        if(j == 0)
        str+="0";
        if(j>0&&j<10)
        str+=(j+'0');
        if(j>=10)
        {
            str += ('A'+(j-10));
        }
        Shift_Sixteen(n/16);
    }
        for(int j = str.length()-1;j>=0;j--)
    cout<<str[j];
}
 

int main()
{
    int n;
    	int i=0;
	string str;
     
    while(cin>>n)
    {
    	cout<<"十进制数"<<n<<"的二进制为:" ;
        Shift_Two(n);
        K();
        	cout<<"十进制数"<<n<<"的四进制为:" ;
        Shift_Four(n);
        K();
        	cout<<"十进制数"<<n<<"的八进制为:" ;
        Shift_Eight(n);
        K();
        	cout<<"十进制数"<<n<<"的十六进制为:" ;
        Shift_Sixteen(n);


    }
    return 0;
}

题目二: 

#include<iostream>
using namespace std; 

void turn(int i)
{
	int j=0;
	if(i==0)
	{	
		cout<<"0";  //0位是1时,配合调用前的2()正好组成2(0),即1
		return;
	}
	if (i==1)
	{		

		cout<<"2(0)"; //1位是0,即2(2(0)),也就是2,只有2(),括号内的数拆分时有1才会用到
		return;
	}
	if(i==2)
	{
	cout<<2;;  //2(2)
		return;
	}
	
	for(;i!=0;j++)
	{
		if(i&1)   //位运算
		{
			if(j==1)  //2位为1直接打印2,不再递归
				cout<<"2";
			else
			{
				cout<<"2(";
				turn(j);	
				cout<<")";		
			}
			i=i>>1;
			if(i!=0)
				cout<<"+"; //看情况打印“+”号
			continue;
			
		}
		i=i>>1;
	}
}


int main(int argc, char* argv[])
{
	int i;
cin>>i;
	turn(i);
	return 0;
}

发布了42 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41233643/article/details/90724798