简单模拟
1.对于长度为6位的一个01串,每一位都可能是0或1,一共有64种可能。它的前几个是:
000000
000001
000010
000011
000100
请按从小到大的顺序输出这64种01串。
模拟二进制加法
#include <bits/stdc++.h> using namespace std; void func(int* a){ int i=5; while(i>0){ if(a[i]==0){ a[i]=1; break; } if(a[i]==1&&a[i-1]==0){ a[i-1] = 1; a[i] = 0; break; } if(a[i]==1&&a[i-1]==1) { a[i]=0; a[i-1]=0; i=i-2; } } } int main() { int a[6]={0,0,0,0,0,0}; for(int i=1;i<=64;i++){ for(int i=0;i<6;i++) cout<<a[i]; cout <<endl; func(a); } return 0; }
利用十进制转二进制,因为十进制加法是容易的,所以只需要先进行十进制加法,再转成二进制
#include <bits/stdc++.h> using namespace std; int a[6]={0}; void dtob(int n) { int i=5; while(n>0){ int s = n%2; a[i]=s; n=n/2; i--; } } int main() { for(int i=0;i<64;i++){ dtob(i); for(int i=0;i<6;i++) cout <<a[i]; cout <<endl; } return 0; }