递归--练习9--noi8758 2的幂次方表示

递归--练习9--noi8758 2的幂次方表示

一、心得

找准子问题就好

二、题目

8758:2的幂次方表示

总时间限制: 
1000ms

内存限制: 
65536kB
描述

任何一个正整数都可以用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)
来源
NOIP1998复赛 普及组 第一题

三、AC代码

 1 /*
 2 noi8758 2的幂次方表示
 3
 4 找准子问题就好
 5 */
 6 #include <iostream>
 7 #define Max 21
 8 using namespace std;
 9 //将一个数转化为2进制
10 void to2(int n,int (&a)[Max]){
11     int i=0;
12     while(n!=0){
13         a[i++]=n%2;
14         n/=2;
15     }
16 }
17 //打印数组
18 void printArray(int a[],int n){
19     for(int i=0;i<=n;i++){
20         cout<<a[i]<<" ";
21         if((i+1)%5==0){
22             cout<<endl;
23         }
24     }
25     cout<<endl;
26 }
27 //递归操作
28 void f(int n){
29     int a[Max]={0};
30     to2(n,a);
31     //printArray(a,20);
32     int first=1;
33
34
35     for(int i=Max;i>=3;i--){
36         if(a[i]==1){
37             if(first){
38                 cout<<"2(";
39                 f(i);
40                 cout<<")";
41                 first=0;
42             }
43             else{
44                 cout<<"+2(";
45                 f(i);
46                 cout<<")";
47             }
48         }
49
50     }
51
52     if(1==a[2]){
53         if(first){
54             cout<<"2(2)";
55             first=0;
56         }
57         else{
58             cout<<"+2(2)";
59         }
60     }
61     if(1==a[1]){
62         if(first){
63             cout<<"2";
64             first=0;
65         }
66         else{
67             cout<<"+2";
68         }
69     }
70     if(1==a[0]){
71         if(first){
72             cout<<"2(0)";
73             first=0;
74         }
75         else{
76             cout<<"+2(0)";
77         }
78     }
79 }
80 int main(){
81     int n;
82     cin>>n;
83     f(n);
84     cout<<endl;
85     return 0;
86 }
时间: 2024-08-28 08:00:27

递归--练习9--noi8758 2的幂次方表示的相关文章

【日常学习】【搜索/递归】codevs2802 二的幂次方题解

转载请注明出处 [ametake版权全部]http://blog.csdn.net/ametake欢迎来看 题目描写叙述 Description 不论什么一个正整数都能够用2的幂次方表示. 比如:137=2^7+2^3+2^0 同一时候约定次方用括号来表示,即a^b可表示为a(b) 由此可知,137可表示为:2(7)+2(3)+2(0) 进一步:7=2^2+2+2^0 (2^1用2表示) 3=2+2^0 所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如:1

递归好题,NOIP1998幂次方

先占坑提醒自己写这篇文章.回家再补,机房时间宝贵. 洛谷1010 幂次方 本题地址:http://www.luogu.org/problem/show?pid=1010 题目描述 任何一个正整数都可以用2的幂次方表示.例如         137=2^7+2^3+2^0         同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为:         2(7)+2(3)+2(0) 进一步:7= 2^2+2+2^0   (2^1用2表示)         3=2+

快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方!

将4的幂次方写成2进制形式后,很容易发现有个特点,2进制中只有1个1(1在奇数位置),并且后面跟了偶数个0:因此问题可以转化为判断1后面是否跟了偶数个0就可以了. 4的整数次幂的二进制可以写为2^(2*n),即也可以写成2的幂次方,当然就满足2的幂次方的条件,即num&(num-1)==0. 思路:首先用条件num&(num-1)==0来判断是否为2的幂次方,若不满足,则不是.若满足,再用条件num&0x5555 5555 来判断,若为真,则这个整数是4 的幂次方.否则不是. #i

2的幂次方(power)

2的幂次方(power) 题目描述 任何一个正整数都可以用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

洛谷OJ P1010 幂次方 解题报告

洛谷OJ P1010 幂次方 解题报告 by MedalPluS 题目描述   任何一个正整数都可以用2的幂次方表示.例如        137=2^7+2^3+2^0         同时约定方次用括号来表示,即a^b 可表示为a(b).由此可知,137可表示为:        2(7)+2(3)+2(0)进一步:7= 2^2+2+2^0   (21用2表示)        3=2+20   所以最后137可表示为:        2(2(2)+2+2(0))+2(2+2(0))+2(0)又如

【题解】二的幂次方

题目描述 任何一个正整数都可以用2的幂次方表示.例如:137=27+23+2027+23+20,同时约定次方用括号来表示,即abab可表示为a(b). 由此可知,137可表示为:2(7)+2(3)+2(0),进一步:7=22+2+2022+2+20(2121用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))+

c++2的幂次方

c++2的幂次方? 题目描述 任何一个正整数都可以用2的幂次方表示. 同时约定用括号来表示方次,即a的b次,可以表示为a(b). 由此可知,137可以表示为: 2(7)+2(3)+2(0) 进一步: 7=2(2)+2+2(0)(2的1次用2表示) 3=2+2(0) 所以137可以表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0) 按 2 的次幂降次排列. 输入 正整数n(n<=20000) 输出 用0,2表示符合约定的n(在表格中不能有空格). 样例输入 137 样例输出 2(

解题报告——2018级2016第二学期第四周作业 (2的幂次方)

解题报告——2018级2016第二学期第四周作业 题目: 描述 任何一个正整数都可以用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))+

递归练习之求 x 的 N 次方

/********************************************************************************* Copyright (C), 1988-1999, drvivermonkey. Co., Ltd. File name: Author: Driver Monkey Version: Mail:[email protected] qq:196568501 Date: 2014.04.02 Description: 递归练习之求 x