题解 | #2的幂次方#

2的幂次方

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

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

string f(int n) {
	string res = "";
	vector<int>v;
	while (n != 0) {
		int t = n % 2;
		v.push_back(t);
		n /= 2;
	}
	reverse(v.begin(), v.end());
	for (int i = 0; i < v.size(); i++) {
		if (v[i] == 0)continue;
		if (i == v.size() - 1) {
			if (res.size() != 0)res += "+";
			res += "2(0)";
		}
		else if(i==v.size()-2){
			if (res.size() != 0)res += "+";
			res += "2";
		}
		else if (i == v.size() - 3) {
			if (res.size() != 0)res += "+";
			res += "2(2)";
		}
		else {
			res += "2(";
			res += f(v.size()-1-i);
			res += ")";
		}
	}
	while (res.find(")2") != res.npos) {
		int pos = res.find(")2");
		res.insert(pos + 1, "+");
	}
	return res;
}
int main() {
	
	int n;
	while (cin >> n) {
		cout << f(n) << endl;
	}


	
	return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务