我首先的思路是定义一个函数,来将输入的数转化为二进制的数,再判断二进制数中1多还是0多,从而判断是A类数还是B类数。
不过在二进制转化有些困难,就查了查资料:
例如:29。用短除法,不断除以2,每次将余数写在后面,直到最后商为0时,停止,从下至上读余数,就是29的二进制数。
有了这个概念,定义函数就容易多了。
我用bool定义的:
bool s(int x) { int a=0,b=0; while(x>0) { if(x%2==1) a++; else b++; x/=2; } return a>b; }
所以,如果s(x)为真,则x是A类数,否则x为B类数。
1 #include<iostream> 2 using namespace std; 3 bool s(int x); 4 int main() 5 { 6 int a=0,b=0; 7 int i; 8 for(i=1;i<=1000;i++) 9 if(s(i)) 10 a++; 11 else 12 b++; 13 cout<<a<<" "<<b<<endl; 14 return 0; 15 } 16 bool s(int x) 17 { 18 int a=0,b=0; 19 while(x>0) 20 { 21 if(x%2==1) 22 a++; 23 else 24 b++; 25 x/=2; 26 } 27 return a>b; 28 }
我做这个题最大的收获是了解了一种新的十进制转化为二进制的方法。