zoukankan      html  css  js  c++  java
  • SSLZYC 2407 负进制

    题目大意:
    求一个数的负二进制


    思路:

    思路一:考场打表

    我必须说一句:数据太水太水太水!!!!!!!
    把题目描述给出的几组数据打表。。。60分!

    代码:

    #include <cstdio>
    using namespace std;
    int n;
    int main()
    {
        scanf("%d",&n);
        if (n==-13){puts("110111");return 0;}
        if (n==-1){puts("11");return 0;}
        if (n==-2){puts("10");return 0;}
        if (n==-3){puts("1101");return 0;}
        if (n==-4){puts("1100");return 0;}
        if (n==-5){puts("1111");return 0;}
        if (n==1){puts("1");return 0;}
        if (n==2){puts("110");return 0;}
        if (n==3){puts("111");return 0;}
        if (n==4){puts("100");return 0;}
        if (n==5){puts("101");return 0;}
        if (n==6){puts("11010");return 0;}
        if (n==7){puts("11011");return 0;}
        if (n==8){puts("11000");return 0;}
        if (n==9){puts("11001");return 0;}
        puts("0");  //打表
        return 0;
    }

    思路二:贪心

    但是没有打。
    好早就想到贪心。因为转二进制是可以用贪心的。所以负二进制也有可能用贪心。
    事实证明,贪心是可以过的(同学 WYC 打出来并AC了)

    思路三:取余法

    考后看题解,发现正解是像求二进制一样的取余法。就是除以2求余,只不过要加几个符号而以。

    AC正解代码:

    #include <cstdio>
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int n,a[100001],i,j;
    
    int main()
    {
        scanf("%d",&n);
        if (n==0)   //特殊判断
        {
            puts("0");
            return 0;
        }
        while (n!=0)  //取余开始
        {
            i++;
            a[i]=abs(n%2);
            n=-(n-a[i])/2;
        }
        for (j=i;j>=1;j--)
         printf("%d",a[j]);  //倒序输出
        return 0;
    }
  • 相关阅读:
    java学习--工具类学习之Arrays(1)
    509. 斐波那契数
    572. 另一个树的子树
    cmd中的标准文件重定向
    ng正则使用(持续更新)
    MySQL基准测试
    mysql_connect 弃用之后使用mysqli替换需要注意事项
    数据迁移到rds时候犯下的低级错误
    MySQL 架构与历史
    mysql中涉及到钱的字段如何设计
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313084.html
Copyright © 2011-2022 走看看