HDU 4814 Golden Radio Base
来源:互联网 发布:成都多益网络 编辑:程序博客网 时间:2024/06/03 20:02
#include <iostream>#include <cstdio>#include <string>#include <algorithm>#include <fstream>#include <cstring>using namespace std;struct node { string in,de;// in(整数部分) de(小数部分) num = in_n in_n-1 in_n-2...in_1 in_0.de_0 de_1 de_2...de_n-1 de_n node(string a,string b):in(a),de(b){} node(){} void print() { string tmp=in; reverse(tmp.begin(),tmp.end()); cout<<tmp; if(de.size()) cout<<"."<<de; puts(""); } string add(string ans,string tmp) { if(ans.size()<tmp.size()) swap(ans,tmp); int len=tmp.size(),i; for(i=0;i<len;++i) { if(tmp[i]=='1') ++ans[i]; } return ans; } // 加法重载 node operator + (const node &a) { node ans(add(in,a.in),add(de,a.de)); ans.form(); return ans; } bool check_2() { bool flag=0; int len=in.size(),i; //整数部分 for(i=0;i<len;++i) { while(in[i]>='2') { flag=1;in[i]-=2; if(i<len-1) ++in[i+1]; else in+='1'; if(i>=2) ++in[i-2]; else if(i==1) de=add(de,"1"); else de=add(de,"01"); } } //小数部分 len=de.size(); for(i=0;i<len;++i) { while(de[i]>='2') { flag=1;de[i]-=2; if(i>0) ++de[i-1]; else in=add(in,"1"); if(i<len-2) ++de[i+2]; else if(i==len-2) de+="1"; else de+="01"; } } return flag; } bool check_11() { int len=in.size(),i; bool flag=0; for(i=len-1;i>0;--i) { if(in[i]=='1'&in[i-1]=='1') { flag=1,--in[i],--in[i-1]; if(i==len-1) in+='1'; else ++in[i+1]; } } if(in[0]=='1'&de[0]=='1') { --in[0],--de[0]; flag=1; if(len==1) in+='1'; else ++in[i+1]; } len=de.size(); for(i=0;i<len-1;++i) { if(de[i]=='1'&de[i+1]=='1') { flag=1,--de[i],--de[i+1]; if(i==0) in=add(in,"1"); else ++de[i-1]; } } return flag; } //标准化 void form() { while(check_2()); while(check_11()); int i,len=in.size(); for(i=len-1;i>=0;--i) { if(in[i]=='0') in.erase(in.begin()+i,in.begin()+i+1); else break; } len=de.size(); for(i=len-1;i>=0;--i) { if(de[i]=='0') de.erase(de.begin()+i,de.begin()+i+1); else break; } }}p[33];void pre() { //预处理,存2^i的数。(0<=i<32) node t("1",""); int i; for(i=0;i<32;++i) { p[i]=t; t=t+t; }}int main() { int N; pre(); while(~scanf("%d",&N)){ node ans("0",""); int i=0; //转换成二进制,提高效率。 while(N) { if(N&1) ans=ans+p[i]; N>>=1,i++; } ans.print(); } return 0;}
0 0
- HDU 4814 Golden Radio Base
- HDU 4814 Golden Radio Base
- HDU 4814 Golden Radio Base
- HDU 4814 Golden Radio Base
- HDU 4814 Golden Radio Base
- HDU 4814 Golden Radio Base
- [hdu 4814]Golden Radio Base 找规律
- HDU 4814 Golden Radio Base 小模拟
- HDU 4814 Golden Radio Base 模拟
- hdu 4814 Golden Radio Base(数学模拟)
- HDOJ 4814 Golden Radio Base
- HDU - 4814 Golden Radio Base (长春赛区B题)
- HDU 4814 Golden Radio Base 数学 模拟 或者乱搞。。。。
- 2013ICPC长春 HDU 4814 Golden Radio Base 乱搞
- hdu4814 Golden Radio Base
- 2013 Asia Regional Changchun HDU - 4814 Golden Radio Base (进制模拟)
- HDU 4814 Golden Radio Base(2013 ACM/ICPC 长春赛区现场赛)
- HDOJ 4814 Golden Radio Base【推公式 + 暴力】
- 时代科技放得开东方国际快递的说法
- Axure,这个主要是用来进行软件原型线框设计的
- 软件看见发货速度发货丹甫股份热伤风
- (java 功能篇) Java MySQL数据库连接工具类
- 软件原型线框设计
- HDU 4814 Golden Radio Base
- uva12655 Trucks (MST + LCA)
- poj 2299 树状数组求逆序数+离散化
- HDU 4585 Shaolin
- 网络安装CentOS 5.3
- 对ajax同步和异步请求的实际应用
- C++中string类的成员函数介绍
- Ubuntu 安装交叉编译器
- CentOS 6.0图解网络安装全过程