oj 1045 An Easy Problem

在这里插入图片描述

代码:

#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++提交!!!!
经常错的地方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值