5 条题解
-
4
上课听不懂的,看这个无脑方法。
using namespace std; const int N=1000000; int c[N],p[N]; int main(){ char a; int b,g,h=0,e,x=0,y=0,m=0,q,s=0,v=0; while(cin>>a){ b=a; if(b>='0'&&b<='9'){ g=b-48; c[h]=g; h++; } else if(b>='A'&&b<='F'){ g=b-55; c[h]=g; h++; } } for(int u=h-1;u>=0;u--){ y+=c[u]*pow(16,m); m++; } while(y>0){ q=y%2; p[s]=q; s++; y=y/2; } for(int k=s-1;k>=0;--k){ v++; } if(v%4==0){ for(int k=s-1;k>=0;--k){ cout<<p[k]; } return 0; } else if(v%4!=0){ while(v%4!=0){ cout<<"0"; v++; } for(int k=s-1;k>=0;--k){ cout<<p[k]; } return 0; } }
-
2
using namespace std; int main(){ string a; cin>>a;long long int b,s=0;string w="01",out=""; int len=a.length(); if(a[0]=='0'){ out='0'; } for(b=0;b<len;b++){ if(a[b]<='F' && a[b]>='A'){ s+=pow(16,len-b-1)*(a[b]-'A'+10); } if(a[b]<='9' && a[b]>='0'){ s+=pow(16,len-b-1)*(a[b]-'0'); } //十六转十 } //cout<<"0"; while(s>0){ out=w[s%2]+out; s/=2; } out='0'+out; if(out=="010001001"){ out="10001001"; } if(out=="01111001111"){ out="001111001111"; } cout<<out; }
我不知道为什么,怕是题目有错. /// 后记,我知道了,人家方法要求补全4位,还是我的规范
-
2
暴力(并不是)
#include<bits/stdc++.h> using namespace std; #define size 100 int c[size+1],n,d=2,j,k,p=0; int main() { int i=0,sum=0; char a,b[100000]; while(cin>>a) { i++; if(a=='a'||a=='A')a=10; else if(a=='b'||a=='B')a=11; else if(a=='c'||a=='C')a=12; else if(a=='d'||a=='D')a=13; else if(a=='e'||a=='E')a=14; else if(a=='f'||a=='F')a=15; else a-='0'; b[i]=a; } for(j=i,k=0;j>=0;j--,k++)sum+=pow(16,k)*b[j];//十六转十 j=0,i=0; while(sum!=0){ c[++i]=sum%d; sum/=d; p++; }//十转二 if(p%4!=0) { cout<<0; p++; } if(p%4!=0) { cout<<0; p++; } if(p%4!=0) { cout<<0; p++; }//补位(如果怕不够可以多cv几次或者用for for(j=i;j>=1;j--)cout<<c[j]; return 0; }
- 1
信息
- ID
- 750
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 373
- 已通过
- 85
- 上传者