精华内容
下载资源
问答
  • 输入一个二进制数,将其转换为十进制数。 题目解析 这道题,就是一个进制转换的问题。从二进制第一位数开始求十进制数,如图所示: 代码样例 package com.asong.leetcode.BinarytoDecimal; import java.util....

    前言:
    这道题就是一个简单的进制转换,在网上看到了这道题,所以就写一下,在此记录一下。

    题目描述

    输入一个二进制数,将其转换为十进制数。

    题目解析

    这道题,就是一个进制转换的问题。从二进制第一位数开始求十进制数,如图所示:
    在这里插入图片描述

    代码样例

    package com.asong.leetcode.BinarytoDecimal;
    
    import java.util.Scanner;
    
    /**
     * 二进制转10进制
     */
    public class Solution {
        public int BinaryToDecimal(int[] array)
        {
            if(array==null && array.length==0)
            {
                return 0;
            }
            int result = 0;
            int index = array.length-1;
            for (int i = index; i >=0; i--) {
                if(array[i]>=0 && array[i]<=1)
                {
                    if(array[i] == 1) {
                        result = result + (int) Math.pow(2.0,index-i);
                    }
                }else {
                    return 0;
                }
            }
            return result;
        }
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            Solution solution = new Solution();
            while(scanner.hasNext())
            {
                String string = scanner.nextLine();
                String[] str = string.split(",");
                int[] array = new int[str.length];
                for (int i = 0; i < str.length; i++) {
                    array[i] = Integer.parseInt(str[i]);
                }
                int result =solution.BinaryToDecimal(array);
                System.out.println(result);
            }
        }
    }
    
    
    展开全文
  • 输入一个整数,要求输出对应字母,举例:27输出AA。 题目看起来很简单,我们立马能想到的办法是进行 / % 输出对应结果。 可能很快写出这样的错误代码: 注意A的ascial 是65 小写97 ,此处我们是从64开始添加的。...

    输入一个整数,要求输出对应字母,举例:27输出AA。
    题目看起来很简单,我们立马能想到的办法是进行 / % 输出对应结果。
    可能很快写出这样的错误代码:
    注意A的ascial 是65 小写97 ,此处我们是从64开始添加的。

    string numberToSystem26Str(int n) {
        string s = string();
        int number = n;
        while (n>0) {
            s = char(n%26+64) +s;
            n = n/26;
        }
        cout<< number << s<<endl;
        return s;
    }
    

    此时注意: 对于边界情况的考虑,比如26 ,输出就会发生异常,输出A@,很明显不是我们想要的。我们能想到的就是进位的时候对于整数的情况考虑一下。
    我们可能会考虑%27 不就是正好了,27 %27 =0 ,会影响我们的输出。最好的办法还是调整一下%26=0,调整对应字母。
    然后变成:
    对于进位,求下一个大的数我们可能会使用直接/的方法,又会出现问题。

    string numberToSystem26Str(int n) {
        string s = string();
        int number = n;
        while (n>0) {
            int m = n%26;
            if(m==0) m = 26;
            s = char(m+64) +s;
            n = n/26;
        }
        cout<< number << s<<endl;
        return s;
    }
    

    输入26的时候,我们会发现输出AZ,多输出了以为,那怎么样才能规避这个问题呢。 能够%=0,且数值n>0,我们调整一下n的大小。

    string numberToSystem26Str(int n) {
        string s = string();
        int number = n;
        while (n>0) {
            int m = n%26;
            if(m==0) m = 26;
            s = char(m+64) +s;
            if(m ==26) n=n-1;
            n = n/26;
        }
        cout<< number << s<<endl;
        return s;
    }
    

    最后给一个精简版的答案。

    优化答案

    string numberToSystem26Str(int n){
        string s = string();
        int temp =n;
        while (n > 0){
            int m = n % 26;
            if (m == 0) m = 26;
            s = (char)(m + 64) + s;
            n = (n-m) / 26;
        }
        cout<<temp<< s<<endl;
        return s;
    }
    

    可以看到,题目要求一点都不难,但是需要注意的细节特别多。
    %的时候,刚好%=0 的情况
    / 的时候,当%=0, 会不会影响循环条件,是否进行进位。导致输出结果有误。
    短短的15分钟面试时间,白板的情况下,考虑所有的边界情况,写出完整的答案,还是非常有难度的,平时要多准备才能以不变应万变。

    展开全文
  • 进制转换算法

    2019-10-05 11:24:53
    之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二、八、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有一篇能把它说的...

     之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二、八、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有一篇能把它说的清晰、简单、易懂的文章,所以我才写这篇文章的念头,希望能让你再也不用担心、害怕进制之间的转换了。

      下面是二、八、十、十六进制之间关系的结构图:

    wpsC01D.tmp

    (Figure1:进制关系结构图)

    下文会分4个部分对这个图进行分解,针对每个部分会以图文的形式进行讲解:

    1. (二、八、十六进制) → (十进制);
    2. (十进制) → (二、八、十六进制);
    3. (二进制) ↔ (八、十六进制);
    4. (八进制) ↔ (十六进制);

    三.进制转换算法(Convert)

      在数字后面加上不同的字母来表示不同的进位制。B(Binary)表示二进制,O(Octal)表示八进制,D(Decimal)或不加表示十进制,H(Hexadecimal)表示十六进制。例如:(101011)B=(53)O=(43)D=(2B)H

    (一) (二、八、十六进制) → (十进制)

    wpsC01E.tmp

    (Figure2:其他进制转换为十进制)

    • 二进制 → 十进制

      方法:二进制数从低位到高位(即从右往左)计算,第0位的权值是2的0次方,第1位的权值是2的1次方,第2位的权值是2的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

      例:将二进制的(101011)B转换为十进制的步骤如下:

    1. 第0位 1 x 2^0 = 1;

    2. 第1位 1 x 2^1 = 2;

    3. 第2位 0 x 2^2 = 0;

    4. 第3位 1 x 2^3 = 8;

    5. 第4位 0 x 2^4 = 0;

    6. 第5位 1 x 2^5 = 32;

    7. 读数,把结果值相加,1+2+0+8+0+32=43,即(101011)B=(43)D。

    • 八进制 → 十进制

      方法:八进制数从低位到高位(即从右往左)计算,第0位的权值是8的0次方,第1位的权值是8的1次方,第2位的权值是8的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

      八进制就是逢8进1,八进制数采用 0~7这八数来表达一个数。

      例:将八进制的(53)O转换为十进制的步骤如下:

    1. 第0位 3 x 8^0 = 3;

    2. 第1位 5 x 8^1 = 40;

    3. 读数,把结果值相加,3+40=43,即(53)O=(43)D。

    • 十六进制 → 十进制

      方法:十六进制数从低位到高位(即从右往左)计算,第0位的权值是16的0次方,第1位的权值是16的1次方,第2位的权值是16的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

      十六进制就是逢16进1,十六进制的16个数为0123456789ABCDEF。

      例:将十六进制的(2B)H转换为十进制的步骤如下:

    1. 第0位 B x 16^0 = 11;

    2. 第1位 2 x 16^1 = 32;

    3. 读数,把结果值相加,11+32=43,即(2B)H=(43)D。

    (二) (十进制) → (二、八、十六进制)

    wpsC01F.tmp

    (Figure3:十进制转换为其它进制)

    • 十进制 → 二进制

      方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。 

      例:将十进制的(43)D转换为二进制的步骤如下:

    1. 将商43除以2,商21余数为1;

    2. 将商21除以2,商10余数为1;

    3. 将商10除以2,商5余数为0;

    4. 将商5除以2,商2余数为1;

    5. 将商2除以2,商1余数为0; 

    6. 将商1除以2,商0余数为1; 

    7. 读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,101011,即(43)D=(101011)B。

    wpsC02F.tmp

    (Figure4:图解十进制 → 二进制)

    • 十进制 → 八进制

      方法1:除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。

      例:将十进制的(796)D转换为八进制的步骤如下:

    1. 将商796除以8,商99余数为4;

    2. 将商99除以8,商12余数为3;

    3. 将商12除以8,商1余数为4;

    4. 将商1除以8,商0余数为1;

    5. 读数,因为最后一位是经过多次除以8才得到的,因此它是最高位,读数字从最后的余数向前读,1434,即(796)D=(1434)O。

    wpsC030.tmp

    (Figure5:图解十进制 → 八进制)

      方法2:使用间接法,先将十进制转换成二进制,然后将二进制又转换成八进制;

    wpsC031.tmp

    (Figure6:图解十进制 → 八进制)

    • 十进制 → 十六进制

      方法1:除16取余法,即每次将整数部分除以16,余数为该位权上的数,而商继续除以16,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。

      例:将十进制的(796)D转换为十六进制的步骤如下:

    1. 将商796除以16,商49余数为12,对应十六进制的C;

    2. 将商49除以16,商3余数为1;

    3. 将商3除以16,商0余数为3;

    4. 读数,因为最后一位是经过多次除以16才得到的,因此它是最高位,读数字从最后的余数向前读,31C,即(796)D=(31C)H。

    wpsC042.tmp

    (Figure7:图解十进制 → 十六进制)

      方法2:使用间接法,先将十进制转换成二进制,然后将二进制又转换成十六进制;

    wpsC043.tmp

    (Figure8:图解十进制 → 十六进制)

    (三) (二进制) ↔ (八、十六进制)

    wpsC044.tmp

    (Figure9:二进制转换为其它进制)

    • 二进制 → 八进制

      方法:取三合一法,即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的八进制数。如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足三位。

      例:将二进制的(11010111.0100111)B转换为八进制的步骤如下:

    1. 小数点前111 = 7;

    2. 010 = 2;

    3. 11补全为011,011 = 3;

    4. 小数点后010 = 2;

    5. 011 = 3;

    6. 1补全为100,100 = 4;

    7. 读数,读数从高位到低位,即(11010111.0100111)B=(327.234)O。

    wpsC054.tmp

    (Figure10:图解二进制 → 八进制)

    二进制与八进制编码对应表:

    二进制

    八进制

    000

    0

    001

    1

    010

    2

    011

    3

    100

    4

    101

    5

    110

    6

    111

    7

     

    • 八进制 → 二进制

      方法:取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧。

      例:将八进制的(327)O转换为二进制的步骤如下:

    1. 3 = 011;

    2. 2 = 010;

    3. 7 = 111;

    4. 读数,读数从高位到低位,011010111,即(327)O=(11010111)B。

    wpsC055.tmp

    (Figure11:图解八进制 → 二进制)

    • 二进制 → 十六进制

      方法:取四合一法,即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。如果向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。

      例:将二进制的(11010111)B转换为十六进制的步骤如下:

    1. 0111 = 7;

    2. 1101 = D;

    3. 读数,读数从高位到低位,即(11010111)B=(D7)H。

    wpsC056.tmp

    (Figure12:图解二进制 → 十六进制)

    • 十六进制 → 二进制

      方法:取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。

      例:将十六进制的(D7)H转换为二进制的步骤如下:

    1. D = 1101;

    2. 7 = 0111;

    3. 读数,读数从高位到低位,即(D7)H=(11010111)B。

    wpsC057.tmp

    (Figure13:图解十六进制 → 二进制)

    (四) (八进制) ↔ (十六进制)

    wpsC058.tmp

    (Figure14:八进制与十六进制之间的转换)

    • 八进制 → 十六进制

      方法:将八进制转换为二进制,然后再将二进制转换为十六进制,小数点位置不变。

      例:将八进制的(327)O转换为十六进制的步骤如下:

    1. 3 = 011;

    2. 2 = 010;

    3. 7 = 111;

    4. 0111 = 7;

    5. 1101 = D;

    6. 读数,读数从高位到低位,D7,即(327)O=(D7)H。

    wpsC069.tmp

    (Figure15:图解八进制 → 十六进制)

    • 十六进制 → 八进制

      方法:将十六进制转换为二进制,然后再将二进制转换为八进制,小数点位置不变。

      例:将十六进制的(D7)H转换为八进制的步骤如下:

    1. 7 = 0111;

    2. D = 1101;

    3. 0111 = 7;

    4. 010 = 2;

    5. 011 = 3;

    6. 读数,读数从高位到低位,327,即(D7)H=(327)O。

    wpsC06A.tmp

    (Figure16:图解十六进制 → 八进制)

    四.扩展阅读

      1. 包含小数的进制换算:

    (ABC.8C)H=10x16^2+11x16^1+12x16^0+8x16^-1+12x16^-2

    =2560+176+12+0.5+0.046875

    =(2748.546875)D

      2. 负次幂的计算:

    2^-5=2^(0-5)=2^0/2^5=1/2^5

    同底数幂相除,底数不变,指数相减,反过来

    3. 我们需要了解一个数学关系,即23=8,24=16,而八进制和十六进制是用这关系衍生而来的,即用三位二进制表示一位八进制,用四位二进制表示一位十六进制数。接着,记住4个数字8、4、2、1(23=8、22=4、21=2、20=1)。

    转载于:https://www.cnblogs.com/-new/p/6667213.html

    展开全文
  • 数字序列如何Excel中字母表示的序列——一种特殊的十进制转二十六进制;例子:基于matlab用excel填充颜色的方法绘制一个栅格图像,介绍十进制转excel二十六进制算法

    数字序列如何Excel中字母表示的序列——一种特殊的十进制转二十六进制,以matlab调用excel画一幅像素画为例

    matlab代码

    原理比较简单,实际上是将JPG图片的RGB3个波段的值分别读到3个矩阵/二维数组,再根据矩阵/数组的值确定颜色,再用程序将excel背景颜色填充即可。需要注意的是excel的单元格不是正方形,须将之重新调一下行高和列宽使之相等,行高和列宽的单位不同,需要换算 。另一个难点是 将数字表示的列序转为excel中的字母表示

    clc;
        clear;
        a=imread('C:\Users\csh_g\Pictures\Saved Pictures\test.jpg'); %自己的路径
        a1=a(:,:,1);
        a2=a(:,:,2);
        a3=a(:,:,3);
        % a1=round(rand(533,800)*254)+1 ;
        % a2=round(rand(533,800)*254)+1 ;
        % a3=round(rand(533,800)*254)+1 ;
        hExcel = actxserver('excel.application');   % 创建一个excel实例对象
        hWorkbooks = hExcel.Workbooks;          % 创建一个活动工作本组对象
        hWorkbook = hWorkbooks.invoke('Add');          % 增加一个工作本(簿)对象
        hSheets = hExcel.ActiveWorkBook.Sheets;      % 获得当前工作本句柄
        set(hExcel,'Visible',1);
        hSheet2 = hSheets.Add;
        hSheet2.Activate;
        hSheet2.Cells.RowHeight = 10;        %设置行高
        hSheet2.Cells.ColumnWidth = 1.63;      %设列宽,excel行宽和列高单位不同,绘制成方格需要换算一下
        for i=1:533  %行,
            for j=1:800  %列 ,用列名\
            %-------------序号转算列序字符串-------------------
                n=j;
                count=0;
                temp='';
                while floor(n/26)>0   %取整
                    yushu=mod(n,26);
                    if yushu==0
                       temp=strcat(char(26+64),temp); 
                       n=floor(n/26)-1;
                    else
                        temp=strcat(char(yushu+64),temp);
                        n=floor(n/26);
                    end
                end
                if n==0
                else
                    temp=strcat(char(n+64),temp);
                end
                range=strcat(temp,num2str(i));
                %--------------序号换算列序字符串,实际上是十进制转26进制---------
                    R=a1(i,j);
                    G=a2(i,j);
                    B=a3(i,j);
                    color=double(R)+256*double(G)+65536*double(B);%对应颜色
                hSheet2.Range(range).Interior.Color=color;         
            end
        end
    

    十进制转二十六进制

    其中对于行序,excel中可以直接用,但是列序在excel中是字母表示的,这里可以看成是26进制的表达:A,B,C,…,Z,AA,AB,AC,…,AZ,BA,BB,BC,…,BZ,… 特殊地是,与其他进制不同,这里并不是从0开始的,可以看成是从1开始,到26结束的(理论上的26进制应该是从0开始,25结束)。

    所以,这里应该如何将数字列序转为字母表达,以便excel参数识别呢。
    首先确定每个数对应的字母是什么:1-26分别对应A-Z,char()可将数字转为对应ASCII字符,65是A,依次类推,则某个数字x对应字母为char(64+x)。

    十进制转二十六字母进制

    因为十进制转其他进制是除以进制数,这里就要考虑一下整除26的特殊情况:整除余数为0,但是0是没有对应字母的,实际上对应的是Z,所以此时应该设定为余数是26。 这一位对应的字母不应该是char(64+0),而是应该是char(64+26),即对应字母Z,代码如下(输入任意正整数数字n):

    temp='';                                     %初始化字母列序
    while floor(n/26)>0                           %取整,整数不为0一直循环
          yushu=mod(n,26);                        %取余
          if yushu==0                             %余数为0情况,变为余数为26,下一步的取整减1(一单位进制数)
              temp=strcat(char(26+64),temp); 
              n=floor(n/26)-1;
          else                                    %一般情况
              temp=strcat(char(yushu+64),temp);
              n=floor(n/26);
          end
    end
    
    展开全文
  •  之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二、八、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有一篇能把它说的...
  • PKU数据结构与算法Python版–习题总结(4)–十进制转换为十一下进制 1、题目 输入一个十进制数以及目标进制,输出它对应的目标进制的数。 2、方法 除k取余法 3、思路 由于取余的过程中涉及先进后出的特点,采用栈...
  • 算法笔记(进制转换

    千次阅读 2018-06-04 08:44:01
    两种情况:(1)将P...将P进制数在转化为10进制数y: 十进制数形式为: y = d1d2d3d4d5d6d7............dn 同可以写为: y = d1*10^(n-1) + d2*10^(n-2)+............+dn-1*10 + dn; P进制数x为a1a2a3a4a5a6....
  • 六进制,八进制,二进制,十进制之间的转换是最基本的能力,但有些题目对于新手来说有点难以理解,我拿出一道题来拓展的讲一讲。 进制转换方法: &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp
  • 十进制广泛地使用于日常生活及科学研究中,二进制、八进制、十六进制广泛地应用于计算机领域里,十二进制用于计算年、月、时辰,六十进制用于计算分、秒,二十进制曾被玛雅人使用过。由于我们使用各种进制来认知这个...
  • 十进制有十个不同符号: convString ="0123456789"比十小的整数,转换成十进制, 直接查表就可以了: convString[n]想办法把比十大的整数,拆成一系列比十小的整数,逐个查表比如七百十九,拆成七、、九,查表...
  • 地球人都知道,我们学习编程常常会接触到不同进制的数,而最多的就是二进制、八进制、十进制、十六进制。 鱼C人还知道,二进制是计算机唯一认识的,十进制是人们通常使用的。 那么,有没有谁知道八进制和十六...
  • - 哎,这个不同于: 三十六以内的进制转换(加注释多多),小程序版 源代码&amp;amp;amp;注释
  • 首先把输入通过一系列算法转换成bool数组,bool的真假对应硬件中的高低电平,这样就可以模拟芯片电路的与或非原理实现软件层面的加减乘除,所以最后就可以成功的实现任意进制【二进制到三十六进制】的格式计算与转换...
  • 一、数制类型 1.1、二进制 二进制特点:2种符号(0-1)逢二进一 ...三、十六进制与十进制 四、二进制与十六进制 五、二进制与IP地址 、储存单位 mac地址全球唯一就是物理地址 听得很懵逼 ,就酱,结束。 ...
  • 进制之间的转换

    千次阅读 2006-02-03 20:51:00
    算法可以应用于所有进制之间的转换方式,你可以应用于二进制、八进制、十进制、十六进制、十四进制、100进制、三百进制等.......前提是必须提供不能重复的进制表示字符,你可以用任何的字符表示,包括各种英文的...
  • 栈的应用:十进制转换为二进制 一、十进制&&二进制? 十进制:是用0~9这十个字符表示 二进制:是用0~1这两个字符表示 转换实例: 十进制数字233对应的二进制数字为11101001 二、使用步骤 1.引入库 代码如下...
  • 十进制整数转换为二、八、十六进制整数 *2.括号匹配问题 */ header("content-type:text/html;charset=gb2312"); //在PHP数据结构之五 栈的PHP的实现和栈的基本操作可以找到StackLinked类 include_once("./...
  • 十进制转七进制 十进制转十六进制 二十六进制 统计阶乘尾部有多少个 0 相遇问题 改变数组元素使所有的数组元素都相等 多数投票问题 数组中出现次数多于 n / 2 的元素 找出数组中的乘积最大的三个数 构建...
  • RGB色彩说明和转换算法

    万次阅读 2004-09-16 10:39:00
    RGB数值换算 图片处理时,经常用到 RBG 的数值,它可以用十进制(0-255)或十六进制(00-FF)来表示。一斤等于十两,就是十六进制。 十进制的数是利用 0 到 9 十个数码来表示。十六进制是利用 0 到 9 十个数码,再加上...
  • 将一个字符串S映射为一个整数:(1)大写字母“A~Z”:A~Z视为0~25,将26个字符对应到二十六进制,按照二十六进制转换为十进制:代码:int hashFunc(char S[], int len){ int id=0; for(int i=0; i&lt;len; i++...
  • 在学习位运算之前应该知道十进制如何二进制,二进制如何转十进制。这里说明下简单的计算方式。 十进制 33 可以看成是 32 + 1 ,并且 33 应该是位二进制的(因为 33 近似 32,而 32 是 2 的五次方,所以是位)...
  • 2019-06-08 12:21:37
    将非负十进制数n转换为b进制,就拿十进制转二进制来说,大多数我们都是使用短除法,先求a%2,得出余数h,然后再用a=a/2, 然后再求a%2,一直循环下去,直到a==0,然后将得到的余数h依次倒序输出即为这个十进制数的二进制...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 133
精华内容 53
关键字:

十进制转六进制算法