• 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;
    }
  • 相关阅读:
    SCRUM第一天
    第八周总结
    第7周总结
    团队项目nabcd
    人月神话1
    课堂练习之四则运算
    第六周总结
    Storm Grouping —— 流分组策略
    抓取网页内容生成Kindle电子书(转)
    浅析PageRank算法(转)
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313084.html
Copyright © 2020-2023  润新知