2的幂次方表示

//MOOC北大程设2的幂次方表示
#include
#include
#include
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;
} 

你可能感兴趣的:(POJ,递归)