题解 | #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;
}

全部评论

相关推荐

难怪不开摄像头,全是简单的性格题,比大疆友善多了
NULL10086:今早上发的测评,我这还没做呢,官网上已经显示挂了
投递大疆等公司7个岗位
点赞 评论 收藏
分享
07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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