代码:
#include<stdio.h>
#include<stdlib.h>
int f(int n)//把一个十进制数转成2进制数的函数
{
int ans=0;
while(n!=0)
{
if(n%2==1)
ans++;//记录下来1的个数
n=n/2;
}
return ans;
}
int main()
{
int n,j,flag=0;//flag存放输入的那个数的二进制形式中1的个数
scanf("%d",&n);
while(n!=0)//最后一个输入0时,程序结束
{
flag=f(n);
for(j=n+1;;j++)//在大于输入的数n中找符合要求的数
{
if(f(j)==flag)
{
printf("%d\n",j);
break;
}
}
scanf("%d",&n);
}
return 0;
}
提交记录:
CE因为使用了c语言来提交,但有c++的头文件
NO.1 WA :用了c++来提交,没有删代码中c++的头文件,错误原因:少了换行…
NO.2 WA :用了c来提交,删了代码中c++的头文件,错误原因:少了换行…
AC:c提交,加了换行,删了c++的东西
总结:
- l
这道题虽然用到了十进制转二进制的方法,但题目只要求输出比n大且转成二进制后1的个数相同的数,因此只需记录下1的个数即可,无需把转后的二进制数用数组存起来
- 2
十进制转二进制的方法:
假设十进制数为n,这里用十进制数11来举例:
11除以2,商5(11/2=5),余1(11%5=1)
5除以2,商2,余1
2/2=1,2%2=0
1/2=0,1%2=1
故二进制数为1011
代码如下:
while(n!=0)
{
a[i++]=n%2;
n=n/2;
}
-3
这道题以输入0结尾,最后输入0时程序结束,代码如下:
-4
注意:输出时加上\n,因为这个问题提交了两次,分数为10
- 5
在文件夹里这道题目的.cpp有#include 和 using namespace std;
但如果加上这两句话提交时选择c时,会出现Compile Error,因为c里面就没有这样的头文件!!!
凡是有这两句话即使用的是c的输入输出格式,也要在OJ上使用c++来提交。
这道题可以只建.cpp的文件,只用c的头文件,用c来提交。一旦包含c++的东西,就用c++提交!!!!
经常错的地方