zoukankan      html  css  js  c++  java
  • 【题解】二的幂次方

    题目描述

    任何一个正整数都可以用2的幂次方表示。例如:137=27+23+2027+23+20,同时约定次方用括号来表示,即(a^b)可表示为a(b)。

    由此可知,137可表示为:2(7)+2(3)+2(0),进一步:7=22+2+2022+2+20((2^1)用2表示),3=2+202+20, 所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)。

    又如:1315=210+28+25+2+1210+28+25+2+1,所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。

    输入输出格式

    输入格式:

    一行,一个正整数n。(n≤20000)

    输出格式:

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

    输入输出样例

    输入样例一:

    137

    输出样例一:

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

    输入样例二:

    1315

    输出样例二:

    2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
    首先,如何把一个数转成二的幂次方表示形式呢?
    先把这个数转成二进制,例如3可以转为11,按权值展开可得2+2(0),然后再用递归再把次方数转二进制,以此类推
    具体程序如下:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    void f(int num)
    {	
    	int b[100000]={},c=0;
    	bool check=false;
    	if(num==0) {cout<<0; return;}
    	if(num==1) {cout<<"2(0)"; return;}
    	if(num==2) {cout<<"2"; return;}
    	while(num!=0)
    	{
    		b[c]=num%2;
    		num/=2;
    		c++;
    	}
    	for(register int i=c-1;i>=0;--i)
    	{
    		if(b[i]==1)
    		{
    			if(!check)
    			{
    				if(i==1)
    				{
    					cout<<"2";
    					check=true;
    					continue;
    				}
    				cout<<"2(";
    				f(i);
    				cout<<")";
    				check=true;
    			}
    			else
    			{
    				if(i==1)
    				{
    					cout<<"+2";
    					continue;
    				}
    				cout<<"+2(";
    				f(i);
    				cout<<")";
    			}
    		}
    	}
    }
    int main()
    {
    	int x=0;
    	cin>>x;
    	f(x);
    }
    
  • 相关阅读:
    event.keycode大全(javascript) (转)
    Javascript 中的 字符串对象 toUpperCase() toString() charAt() indexOf() lastIndexOf() replace() search() substring()
    Javascript 中的 var
    Javascript 中的 Array
    super() (1)
    Javascript 中的事件
    JavaScript验证函数大全 (转)
    javascript数字验证(转)
    Javascript 中 null 与 undefined关系
    Javascript 中的 for ... in
  • 原文地址:https://www.cnblogs.com/2021-yanghaoran/p/10729020.html
Copyright © 2011-2022 走看看