任何一个正整数都可以用 2的幂次方表示。例如 137=2^7+2^3+2^0。
同时约定方次用括号来表示,即 a^b可表示为 a(b)。
由此可知,137 可表示为 2(7)+2(3)+2(0)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)。
测试输入 | 期待的输出 | 时间 | 内存 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 |
|
| 1秒 | M | 0 |
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
void print(int a[],int i);
void powexpression(int n);
void print(int a[],int i){
int j=0;
while(!a[j]) //找到第一个不是0的元素下标
j++;
while(i--){ //判断完就会减1
if(i==j){
if(i>2&&a[i]!=0){
cout<<"2(";
powexpression(i);
cout<<")";
}
else if(i==1&&a[i]!=0)
cout<<2;
else if(a[i]){
cout<<"2("<<i<<')';
}
break;
}
else{
if(i>2&&a[i]!=0){
cout<<"2(";
powexpression(i);
cout<<")+";
}
else if(i==1&&a[i]!=0)
cout<<2<<'+';
else if(a[i]){
cout<<"2("<<i<<')'<<'+';
}
}
}
}
void powexpression(int n){
int a[100];
int i=0;
while(n){
a[i++]=n%2;
n/=2;
}
print(a,i);
}
int main(){
int n;
// freopen("file out.txt","r",stdin);
cin>>n;
powexpression(n);
cout<<endl;
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务