思路很简单,首先将十进制数转换为二进制,然后统计二进制中0和1的个数,然后再判断是A类还是B类,最后按要求输出即可,接下来就是一一细化每一步应该做什么了。
这里主要想讲一下,将十进制转换为n进制的方法。
将十进制转换为n进制,即不断的使用十进制数对n进行除模取余,直到十进制数为0,然后将这些余数逆序即得到n进制数啦。
由于不知道对应的位数,如果使用字符数组也可以做,但是需要使用变量统计位数,此处建议使用字符串来存储n进制数。
完整的正确代码如下:
#include<bits/stdc++.h>
using namespace std;
//转化为二进制
string transform2(int n)
{
string res;
int r; //c是商 r是余数
char c;
while(n!=0)
{
r=n%2;
n=n/2;
c=r+'0';
res.insert(res.begin(),c);
}
//cout<<res<<endl; //测试
return res;
}
//二进制分类 A 1 B 0
int isC(string s)
{
int num0=0,num1=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='0')
num0++;
else
num1++;
}
return num1>num0?1:0;
}
int main()
{
int numA=0,numB=0;
for(int i=1;i<=1000;i++)
{
if(isC(transform2(i))==1)
numA++;
else
numB++;
}
//cout<<transform2(10); //测试
cout<<numA<<" "<<numB<<endl;
}