zoukankan      html  css  js  c++  java
  • NOI2.2 8758:2的幂次方表示

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

    137=27+23+20

    同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:

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

    进一步:7=22+2+20(21用2表示)

     3=2+20

    所以最后137可表示为:

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

    又如:

    1315=210+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)
     
    这道题最大的难点就是如何考虑输出的格式(加号和括号)
    考虑了这两个问题后,就可以用递归自己调用自己来输出
    精心写的程序,一次AC
     
    代码如下:
     
    <span style="font-size:12px;BACKGROUND-COLOR: #ffff99">#include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    void find(int n)
    {
    	int i;
    	bool p=0;
    	while(n!=0)
    	{
    		if(!p)
    			printf("2");
    		else
    			printf("+2");
    		for(i=0;i<=15;i++)
    			if(pow(2,i*1.0)>n)
    			{
    				n-=pow(2,i-1.0);
    				p=1;
    				if(i>3)
    				{
    					printf("(");
    					find(i-1);
    					printf(")");
    				}
    				else
    				{
    					if(i-1==0)
    						printf("(0)");
    					if(i-1==2)
    						printf("(2)");
    				}
    				break;
    			}
    	}
    }
    int main()
    {
    	int n;
    	scanf("%d",&n);
    	find(n);
    }</span>

    每次递归都可以设一个bool变量,来辅助加号的输出,在调用自身的前一行,输出“(”,return之后,再输出“)”
    一切都会变得很简单的!(^_^)
  • 相关阅读:
    MVC: Connection String
    Web API: Security: Authentication and Authority
    Web API: Security: Basic Authentication
    Web API: Client: HttpClient Message Handlers
    Web API: Client: Call a Web API from a .net client
    C#: Delegate and Event
    IIS Media Service: Channel 小结
    WCF: Retry when service is in fault state.
    Windows Azure: Service Bus Relay
    i2c 过程详解(转)
  • 原文地址:https://www.cnblogs.com/Darknesses/p/12002587.html
Copyright © 2011-2022 走看看