2的幂次方

super6.king 2019-07-30 12:35:27
解题思路,代码 任何一个正整数都可以用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(2(2)+2+2(0))+2(2+2(0))+2(0) 代码解释 #include<bits/stdc++.h> using namespace std; void ss(int n,int sum)//n为被分解的数,sum为二进制位数。 { if(n==0) return;//如果n==0,直接返回。 ss(n/2,sum+1); if(n%2) { if(n/2) cout<<"+";//如果n≠0,表示这不是第一个2的幂次方,则输出加号。 if(sum==1) cout<<"2"; else { cout<<"2("; if(sum==0) cout<<"0"; else ss(sum,0); cout<<")"; } } }//如果n不能用2(0),2,2(2)表示则继续分解 int main() { int a; cin>>a; ss(a,0); cout<<endl; return 0; }
...全文
74 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧