• c#十进制转二进制算法 和字符串反转算法


    去某软面试 面试官给个题上黑板做,写个算法 求95转2进制后1的个数。

    我在黑板上敲了

    static int count = 0;
            /// <summary>
            /// 获取10进制数转2进制后中1的个数
            /// </summary>
            public static void BinCount(int a)
            {
                int n = -1;
                int b = 0;
                while(b<=a)
                {
                    n++;
                    b = (int)Math.Pow(2, n);
                }
                count++;
                var m = (int)Math.Pow(2, n - 1);
                if (a - m <= 0)
                {
                    return;
                }
                BinCount(a - m);
            }
    

      下面是main函数调用  返回的结果是6 完全正确。

    static void Main(string[] args)
            {
                BinCount(95);
                var binCount= count;
            }
    

     其实面试官是考你怎么把10进制转成2进制 要求写出10进制转2进制的算法

    于是乎我又写了如下:

            static string str =string.Empty;
            /// <summary>
            /// 10进制转2进制
            /// </summary>
            /// <param name="a"></param>
            public static void GetBinary(int a)
            {
                if(a % 2 == 0)
                {
                    str += "0";
                }
                else
                {
                    str += "1";
                }
                if(a / 2<1)
                {
                    return;
                }
                GetBinary(a / 2);
            }  

    应该用

    StringBuilder 只有一个指针 不然空间会浪费很多

    下面是main 函数调用 结果是 1111101

    static void Main(string[] args)
            {
    
                GetBinary(95);
                var binarya = str;
            }
    

      好吧 结果 是反的,那再考你一个 字符串反转。给你个 “abcd”  给我返回“dcba”

    我又写了下面反转方法:

    /// <summary>
            /// char数组反转
            /// </summary>
            /// <param name="str"></param>
            public static void Reverse(char[] str)
            {
                if (str == null)
                {
                    return;//空判断这个细节一定不能漏
                }
                int i = 0;
                while(i<str.Length-1-i)
                {
                    var tem = str[i];
                    str[i] = str[str.Length -1- i];
                    str[str.Length -1- i] = tem;
                    i++;
                }
            }
    

      于是乎 二进制的也就完整了  返回的binary =1011111

    static void Main(string[] args)
            {
    
                GetBinary(95);
                var binary = str;
                char[] arr = str.ToCharArray();
                Reverse(arr);
                binary = new string(arr);
            }
    

      

  • 相关阅读:
    Importing data in R 1
    R Tidyverse dplyr包学习笔记2
    搭建PHP开发环境
    R parallel包学习笔记2
    测试笔试单选题(持续更新ing)
    http cookie管理中cookie police下部分参数含意
    全国省市县区域信息最新数据库脚本(mysql版本)
    Jmeter运行后出现乱码
    从自身谈在成熟与幼稚公司做测试的差别
    SQL查询中用到的函数
  • 原文地址:https://www.cnblogs.com/youngharvard/p/10524366.html
Copyright © 2020-2023  润新知