HDOJ 4239 - Decoding EDSAC Data 模拟

来源:互联网 发布:ica加权自相关算法 编辑:程序博客网 时间:2024/05/21 06:24

                题意:

                         给了一系列的用操作数转换为17位二进制数的关系..又给出了17位二进制数转化成十进制小数的关系...现在给出操作数..请退出其对应十进制小数.

                题解:

                         这个不恶心..简单题...控制小数位..我使用ssprintf输入到字符串中再调整的...


Program:

#include<iostream>#include<stdio.h>#include<string.h>#include<queue>#include<stack>#include<algorithm>#include<cmath>#include<set>#include<map>#define ll long long#define oo 1<<29#define pi acos(-1.0)using namespace std;char s[45]={"PQWERTYUIOJ#SZK*?F@D!HNM&LXGABCV"},c;int H[300];void PreWork(){       int i;       for (i=0;i<32;i++) H[s[i]]=i;       H['A']=28,H['S']=12;} int A[30];char ss[30];int main(){       int cases,id,t,x,i;       double ans;        PreWork();       scanf("%d",&cases);       while (cases--)       {               scanf("%d",&id);               do { c=getchar(); } while (c==' ');               t=0,x=H[c];               for (i=4;i>=0;i--)                  if (x&(1<<i)) A[++t]=1;                          else  A[++t]=0;               scanf("%d",&x);               for (i=10;i>=0;i--)                  if (x&(1<<i)) A[++t]=1;                          else  A[++t]=0;               do { c=getchar(); } while (c==' ');               if (c=='F') A[++t]=0;                     else  A[++t]=1;               ans=0;                for (i=2;i<=t;i++)                  if (A[i]) ans+=1.0/(1<<(i-1));               if (A[1]==1) ans-=1;               sprintf(ss,"%.25f",ans);               for (i=20;i>=1;i--)                   if (ss[i]!='0') break;                if (ss[i]=='.') i++;               ss[i+1]='\0';               printf("%d %s\n",id,ss);       }       return 0;} 


原创粉丝点击