Poj 1023
十进制转换为二进制,从低位向高位转换,注意数值较大用long long型
每次将1和p相与,分析最低位,当最低位为1且该位为n,p+2,然后右移一位继续计算下一位(因为接右移一位,所以p+2和p++等效)
(这个地方我觉得还可以考虑将该位设为0,有其他可能还要再考虑)
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int main(){ 5 int t; 6 int k; 7 char n[70]; 8 char res[70]; 9 long long p; 10 cin>>t; 11 while(t--){ 12 cin>>k; 13 cin>>n; 14 cin>>p; 15 memset(res,0,sizeof(res)); 16 while(k--){ 17 if(p&1){ 18 if(n[k]=='n'){ 19 p++; 20 } 21 res[k]='1'; 22 } 23 else{ 24 res[k]='0'; 25 } 26 p>>=1; 27 } 28 if(p){ 29 cout<<"Impossible"<<endl; 30 } 31 else{ 32 cout<<res<<endl; 33 } 34 } 35 }