题解 | #2的幂次方#非递归解法

2的幂次方

http://www.nowcoder.com/practice/7cf7b0706d7e4b439481f53e5fdac6e7

看上面的大都是递归解法,我当时是没想出来递归解法的,直接暴力解法,供大家娱乐参考。

正规考试建议还是递归的好。


#include<iostream>
#include<string.h>
using namespace std;

string toBinary(int n) {
	string bin="";
	int index=0;
	while(n!=0) {
		if(n%2!=0) {
			string temp="";
			if(index!=1) {
				temp="2(";
				temp.push_back(index+'0');
				temp+=")";
			} else {
				temp="2";
			}
			n=n>>1;
			if(n!=0) {
				temp.insert(0, "+");
			}
			bin=temp+bin;
		} else {
			n=n>>1;
		}
		index++;
	}
	return bin;
}

string sRes="";

// 分解十进制数的表达方式
void process(int n) {
	if(n==0) {
		printf("0");
		return;
	}
	sRes=toBinary(n);
	for(int i=0; i<sRes.length()-1; i++) {
		if(sRes[i]!='0'&&sRes[i]!='2'
		        &&sRes[i]!='('&&sRes[i]!=')'
				&&sRes[i]!='+') {//大于10的数也能处理,sRes[i]+'0'='()+'不能处理 
			sRes=sRes.substr(0,i)
			     +toBinary(sRes[i]-'0')
			     +sRes.substr(i+1, sRes.length());
			i=0;//从头开始遍历,因为字符串mRes已变
		}
	}
}

int main() {
	int n;
	while(scanf("%d", &n)!=EOF) {
		process(n);
		cout<<sRes<<endl;
	}
	return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务