2006年上海交通大学计算机研究生机试真题
2012-02-29 11:30
363 查看
http://ac.jobdu.com/problem.php?pid=1095 2的幂次方
方法二:
//手动模拟 #include<iostream> #include<string> #include<cstdio> using namespace std; int main(void) { int j,n,flag,m; int binary[15]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384}; string str[20001]; str[1]="2(0)"; str[2]="2"; for(n=3;n<20001;n++) { flag=0,m=n; for(j=14;j>=0;j--) { if(binary[j]>n) continue; else if(binary[j]==n) { str +="2("; str +=str[j]; str +=")"; break; } else { if(m>=binary[j]) { m-=binary[j]; if(flag) str +="+"; str +=str[binary[j]]; flag=1; } } } } while(scanf("%d",&n)!=EOF) { cout<<str <<endl; } return 0; }
方法二:
//递归 #include<iostream> #include<string> #include<cstdio> using namespace std; void dfs(int n) { int i=0,binary[15]; bool add; if(n==0) { printf("0"); return ; } else if(n==1) { printf("2"); return ; } while(n) { if(n&1) binary[i++]=1; else binary[i++]=0; n>>=1; } add=false,i--; for(;i>=0;i--) { if(binary[i]) { if(add) printf("+"); if(i>=2) { printf("2("); dfs(i); printf(")"); } else if(i==1) printf("2"); else if(i==0) printf("2(0)"); add=true; } } } int main(void) { int n; while(scanf("%d",&n)!=EOF) { dfs(n); printf("\n"); } return 0; }
相关文章推荐
- 题目1076:N的阶乘(2006年清华大学计算机研究生机试真题)
- 火星A+B 2006年浙江大学计算机及软件工程研究生机试真题
- 2005年上海交通大学计算机研究生机试真题
- 2011年上海交通大学计算机研究生机试真题
- 题目1017:还是畅通工程(2006年浙江大学计算机及软件工程研究生机试真题)
- 九度题目1042:Coincidence 2008年上海交通大学计算机研究生机试真题
- 2006年清华大学计算机研究生机试真题
- 2011年上海交通大学计算机研究生机试真题
- 题目1018:统计同成绩学生人数(哈希算法,2006年浙江大学计算机及软件工程研究生机试真题)
- 九度题目1015:还是A+B && 2006年浙江大学计算机及软件工程研究生机试真题
- 2006年清华大学计算机研究生机试真题
- 2005年上海交通大学计算机研究生机试真题
- 还是畅通工程 2006年浙江大学计算机及软件工程研究生机试真题
- 2006年浙江大学计算机及软件工程研究生机试真题
- 题目1078:二叉树遍历(2006年清华大学计算机研究生机试真题)
- 题目1042:Coincidence(2008年上海交通大学计算机研究生机试真题)
- 九度OJ 1019 简单计算器 -- 2006年浙江大学计算机及软件工程研究生机试真题
- 九度OJ 1019 简单计算器 -- 2006年浙江大学计算机及软件工程研究生机试真题
- 统计同成绩学生人数 2006年浙江大学计算机及软件工程研究生机试真题
- 2010年上海交通大学计算机研究生机试真题