//MOOC北大程设2的幂次方表示
#include<cstdio>
#include<cstdlib>
#include<cstring>
const int MAXN = 10;
void print(int n) {
int num = n;
char exp[MAXN] = {0};
//printf("****\n");
int cnt = 0, i = 0;
while(num) {
int tmp = num % 2;
if(tmp == 1) exp[i++] = cnt;//相当于因式分解,逆向运算
cnt++;
num /= 2;
}
//printf("----\n");
for(int j = i - 1; j >= 0; j--) {
if(j < i - 1) printf("+");
if(exp[j] == 0) printf("2(0)");
else if(exp[j] == 1) printf("2");
else if(exp[j] > 1) {
printf("2("); print(exp[j]);
printf(")");
}
}
}
int main() {
int n;
while(scanf("%d", &n) == 1 && n) {
print(n);
printf("\n");
}
return 0;
}
2的幂次方表示
最新推荐文章于 2023-09-24 10:04:10 发布