Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 8333 | Accepted: 4986 |
Description
Input
Output
Sample Input
1 2 3 4 78 0
Sample Output
2 4 5 8 83
Source
1 // Presentation Error(展示错误orz) mlgb没换行符报错 第一次出现这种错误整个人都蒙圈了 2 #include<iostream> 3 #include<cstdio> 4 #include<cstdlib> 5 #include<cstring> 6 using namespace std; 7 int er[100001]; 8 int main() 9 { 10 int n; 11 while(cin>>n&& n)//当能输出且不为零时 12 { 13 int k=0,tot=0; 14 memset(er,0,sizeof(er)); 15 while(n)//计算二进制 16 { 17 er[++k]=n%2; 18 n/=2; 19 } 20 k++; 21 for(int i=1;i<=k;i++) 22 { 23 if(er[i]==1)//找1的个数 24 { 25 tot++; 26 er[i]=0; 27 if(er[i+1]==0)//从低位到高位找01 28 { 29 er[i+1]=1;//找到了就改为1; 相当于左移了 30 break; 31 } 32 } 33 } 34 for(int i=1;i<=tot-1;i++) 35 { 36 er[i]=1;//将tot-1个1放在末尾,(右移),tot-1是因为其中一个左移了 37 } 38 int sum=0; 39 for(int i=k;i>=1;i--)//将二进制转换为十进制输出 40 { 41 sum=sum*2+er[i]; 42 } 43 printf("%d\n",sum); 44 } 45 return 0; 46 }
原文:http://www.cnblogs.com/zzyh/p/6641822.html