1348: 幂次方分解
时间限制: 1 Sec 内存限制: 128 MB
提交: 13 解决: 12
您该题的状态:已完成
[提交][状态][讨论版]
题目描述
任何一个正整数都可以用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)
又如:
1315=2^10 +2^8 +2^5 +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表示(在表示中不能有空格)
样例输入
<span style="color:black">1315
</span>
样例输出
<span style="color:black">2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
</span>
提示
来源
题目智能推荐 2922 2926 2389 1798 2925 2931 |
就是一个模拟
没想好思路前,不能写代码。
#include<iostream>
#include<string.h>
#include<algorithm>
#include<cmath>
using namespace std;
int a[16]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};
void digui(int x)
{
if(x==0)
{
printf("0");
return ;
}
if(x==1)
{
printf("2(0)");
return ;
}
if(x==2)
{
printf("2");
return ;
}
for(int i=14;i>=0;i--)
{
if(x>=a[i])
{
x-=a[i];
printf("2");
if(i!=1)
{
printf("(");
digui(i);
printf(")");
}
if(x!=0) // 如果没有分解完,就输出+号
printf("+");
}
}
}
int main()
{
// freopen("A.txt","r",stdin);
int i,j;
int n;
scanf("%d",&n);
digui(n);
printf("\n");
return 0;
}